一简介
Mybatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射
Mybatis3中文文档
MybatisGitHub地址
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
二 第一个Mybatis程序
- 创建一张User表用于测试
CREATE TABLE user( `id` bigint(16) NOT NULL COMMENT '主键id' AUTO_INCREMENT , `name` varchar(30) NOT NULL COMMENT '姓名', `pwd` varchar(30) NOT NULL COMMENT '密码', `remark` varchar(50) DEFAULT NULL COMMENT '备注', primary key (`id`) )engine=INNODB DEFAULT CHARSET=UTF8 INSERT INTO USER (`name`, `pwd`)VALUES("张三", "123") INSERT INTO USER (`name`, `pwd`)VALUES("李四", "123") UPDATE USER SET `name` = "王五" where name = "李四"
- 导入相关依赖
在idea中创建一个普通的maven项目,mybatis-test-parent作为mybatis学习的一个父工程 首先删除src目录 另外在mybatis-test-parent的pom中修改<packaging>为pom 下面是mybatis的相关依赖。<!--依赖--> <dependencies> <!--导入junit单元测试--> <dependency> <groupId>junit</groupId> <artifactId>junit-dep</artifactId> <version>4.9</version> <scope>test</scope> </dependency> <!--导入mysql的连接驱动包--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.17</version> </dependency> <!--导入mybatis的包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version> </dependency> </dependencies>
- 添加配置mybatis的配置文件
我这边在父工程的下面自己新建了一个子工程mybatis-test-01,然后编写mybatis的配置文件<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!--mybatis的核心配置文件--> <configuration> <!--引入properties配置文件--> <properties resource="mybatis.properties"/> <!--mybatis的环境管理 可以配置多套环境--> <environments default="development"> <environment id="development"> <!--mybatis的事务管理器 默认是JDBC的事务管理器--> <transactionManager type="JDBC"/> <!--数据源配置 type=POOLED表示使用连接池--> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers> </configuration>
- mybatis.properties
jdbc.driver=com.mysql.jdbc.Driver #useSSL=true 表示数据库使用安全连接 useUnicode=true 表示使用unicode编码 characterEncoding=UTF-8 表示编码字符集为UTF-8 jdbc.url=jdbc:mysql://127.0.0.1:3306/test?useSSL=true&useUnicode=true&characterEncoding=UTF-8 jdbc.username=root jdbc.password=xxxxx
- 编写Mybatis工具类
public class MybatisUtil { private static SqlSessionFactory sqlSessionFactory; static { //项目启动时就初始化SqlSessionFactory 整个项目中SqlSessionFactory唯一 try{ String resource = "mybatis.xml"; //配置文件路径 InputStream ins = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(ins); }catch (Exception e){ e.printStackTrace(); } } public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
- 实体类
public class User implements Serializable{ private static final long serialVersionUID = -8909780545336725650L; private Long id; private String name; private String pwd; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } }
- Mapper接口
public interface UserMapper { List<User> getUserList(); }
- Mapper.xml配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--命名空间必须是对应的接口的路径 这样mybatis才能映射上对应的接口--> <mapper namespace="com.liliang.mybatis.mapper.UserMapper"> <!-- id必须与Mapper接口中的某个方法去匹配 这样才能映射上某个方法 resultType 表示返回类型 必须是对象的全类名 才能将返回结果映射 成为对应的对象(对于集合类填充的就是集合类中的泛型类) --> <select id="getUserList" resultType="com.liliang.mybatis.pojo.User"> select * from user; </select> </mapper>
- 测试类
public class UserMapperTest { @Test public void test(){ SqlSession sqlSession = MybatisUtil.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> userList = userMapper.getUserList(); System.out.println(JSON.toJSONString(userList)); sqlSession.close(); } }
- 可能遇到的错误
UserMapper is not known to the MapperRegistry.
这种错误就是说UserMapper这个接口没有被注册 即在mybatis的配置文件中没有映入对应的mapper.xml文件
<mappers>
<!--当我在mybatis.xml中注释掉了下面的代码 mybatis就找不到对应的mapper.xml了就会报上面的错误-->
<!-- <mapper resource="mapper/UserMapper.xml"/>-->
</mappers>
```