第一讲: mybaits基础
一、环境搭建
1. Java 1.8
2. Mysql8.023
3. Meanv3.6.2
4. Idea
学习的知识点: jdbc,Java基础,数据库原理,mysql,junit
学生mybaits的官网: 中文帮助:
二、什么是mybaits
1. 简介
1.1 什么是myBatis
MyBatis框架也被称之为ORM(Object/Relation Mapping,即对象关系映射)框架。所谓的ORM就是一种为了解决面向对象与关系型数据库中数据类型不匹配的技术,它通过描述Java对象与数据库表之间的映射关系,自动将Java应用程序中的对象持久化到关系型数据库的表中。
框架结构图:
l MyBatis 是一款优秀的持久层框架
l 它支持自定义 SQL、存储过程以及高级映射。
l MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
l MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
l MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
l 2013年11月迁移到Github。-----说明包可以到Github上找
1.2 如何获取MyBatis
方式一:maven仓库
第一步:搜索maven仓库
第二步:在maven仓库中搜索MyBatis
第三步:点击下载MyBatis
第四步:下载MyBatis的版本
maven仓库中MyBatis版本
org.mybatis
mybatis
3.5.6
MySQL ---8.023
mysql
mysql-connector-java
8.0.23
Mysql-jdbc
mysql
mysql-connector-java
8.0.23
junit
junit
junit
4.13.2
test
[strong>dependencies
[strong>dependency
[strong>groupId
[strong>artifactId
[strong>version
[strong>dependency
[strong>groupId
[strong>artifactId
[strong>version
[strong>dependency
[strong>groupId
[strong>artifactId
[strong>version
[strong>scope
[strong>build
[strong>resources
[strong>resource
[strong>directory
[strong>includes
[strong>include
[strong>include
[strong>filtering
[strong>resource
[strong>directory
[strong>includes
[strong>include
[strong>include
[strong>filtering
[strong>properties
[strong>project.build.sourceEncoding
1.3 持久化与数据持久层
持久化:就是把数据保存到可掉电式存储设备中供之后使用。
三层结构
三层架构就是为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致。
一个最常用的扩展就是将三层体系扩展为五层体系,即表示层(Presentation)、控制/中介层(Controller/Mediator)、领域层(Domain)、数据持久层(Data Persistence)和数据源层(Data Source)。
Mybatis的层结构
1.4 MyBatis的特点
l 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
l 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
l 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
l 提供映射标签,支持对象与数据库的orm字段关系映射
l 提供对象关系映射标签,支持对象关系组建维护
l 提供xml标签,支持编写动态sql。
1.5 补充建议
1.创建数据的方式
最简单的//代码效果参考:http://www.lyjsj.net.cn/wz/art_23997.html
方式,只创建数据库:create database dbname;
创建数据库并设定编码格式:
create database dbname
default character set utf8;
判断原来不存在,则创建数据库,并指定编码格式:
create database if not
exists dbname default character set utf8;
判断原来不存在,则创建数据库,并指定编码格式和校验集:
create database
if not exists dbname default character set utf8 collate utf8_general_ci;
(2) 建表语据
CREATE TABLE user(
id int not null
PRIMARY key ,
name varchar(50)
default null,
pwd varchar(50)
default null,
age int
default null
)ENGINE=InnoDB DEFAULT CHARSET=utf8
#对表创建进行编码
2 第一个mybatis程序
第一步: 建立数据库与表,输入数据
(1)创建数据库jxgl命令:
create database if not exists jxgl default
character set utf8 collate utf8_general_ci
(2)创建用户表
CREATE TABLE user(
id int not null
PRIMARY key ,
name varchar(50)
default null,
pwd varchar(50)
default null,
age //代码效果参考:http://www.lyjsj.net.cn/wx/art_23993.html
intdefault null
)ENGINE=InnoDB DEFAULT CHARSET=utf8
#对表创建进行编码
(3) 插入数据
insert
into user(id,name,pwd,age) values
(1,'李明','123456',34),
(2,'王三','123456',44),
(3,'何物','123456',18)
第二步: 创建普通maven项目
1。 创建maven项目mybatis01
2. 删除src 目录 将这个项目作为父工程
3. 导入manve依赖
要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中即可。
如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:
mysql
mysql-connector-java
8.0.23
org.mybatis
mybatis
3.5.6
junit
junit
4.13.2
第三步: 创建普通module 模块---子工程
1. 创建mybatis-01 模块
2. 设置资源类型
点击file-----project Structur...
弹出对话框----设置资源
第四步: 编写mybatis的配置文件
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
写好版
<!DOCTYPE //代码效果参考:http://www.lyjsj.net.cn/wz/art_23991.html
configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
value="jdbc:mysql://localhost:3306/jxgl?serverTimezone=UTC&useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
第五步: 封装mybatis工具类
创建// sqlsessionfactory工厂
// 创建SqlSession 对象,用于数据库的各种操作
package ljg.com.util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
// 创建sqlsessionfactory工厂
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
// 创建SqlSession 对象,用于数据库的各种操作
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
第六步: 创建pojo 类
public class User {
private int id;
private String name;
private String pwd;
private int age;
public User() {
}
第七步: 创建dao层接口
package ljg.com.dao;
import ljg.com.pojo.User;
import java.util.List;
public interface UserDao {
List getUserList();
}
第八步: 创建接口的实现类配置文件UserMapper.xml,重写接口中的方法;
说明: 1. 在dao层写 在mybatis中对应mapper层
2 文件名最好好接口名字一致,相当于写dao的实现类 userDaoImpl
3 在配置文件中重写UserDao的方法 ,改用sql语句写
如下:
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select from jxgl.user;
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPEmapper
PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN"
""
[strong>mapper namespace="ljg.com.dao.UserMapper"
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPEmapper
PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN"
""
[strong>mapper namespace="ljg.com.mapper.UserMapper"
[strong>insert
id="addUser" parameterType="ljg.com.pojo.User"
insert into xygl.user(id,name,pwd,age) values
(#{id},#{name},#{pwd},#{age})
[strong>select
id="findbyid" resultType="ljg.com.pojo.User"
第九步: 测试操作
注意点: 经常出现的问题:
1. Type interface ljg.com.dao.UserDao
is not known to the MapperRegistry.
类型 接口 userdao 没有在 注册中心注册
解决方法
2.
解决方法 在poml.xml 添加这个文件
src/main/resources
**/.properties
/*.xml
true
src/main/java
/.properties
**/.xml
true
3. .io.MalformedByteSequenceException:
1 字节的 UTF-8 序列的字节 错误
Cause:com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceExcep
解决方法
解决方案:
在pom.xml文件中配置
properties
project
build
sourceEncoding
project
build
sourceEncoding
4. 测试代码
package ljg.com.Userdao;
import ljg.com.dao.UserDao;
import ljg.com.pojo.User;
import ljg.com.util.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserTest {
@Test
public void userTest(){
SqlSession sqlSession=null;
try {
sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
List userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
}catch (Exception e){
System.out.println(e.fillInStackTrace());
&n