mybatis 入门搭建

清疚 2022-10-01 10:55 135阅读 0赞

首先导包

依赖如下

  1. <dependencies>
  2. <dependency>
  3. <groupId>mysql</groupId>
  4. <artifactId>mysql-connector-java</artifactId>
  5. <version>8.0.15</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.mybatis</groupId>
  9. <artifactId>mybatis</artifactId>
  10. <version>3.5.1</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>junit</groupId>
  14. <artifactId>junit</artifactId>
  15. <version>4.11</version>
  16. <scope>test</scope>
  17. </dependency>
  18. </dependencies>
  19. 复制代码

构建SqlSessionFactory

MyBatis应用是以SqlSessionFactory为中心的,实例可以通过SqlSessionFactoryBuilder获得. 其中SqlSessionFactory是工厂接口,任务用于创建SqlSession 配置文件将会解析配置XML文件在Configuration类对象中.

配置XML获取数据源,事务管理器,映射器

在resource文件下新建mybatis-config.xml文件 配置文件内容如下

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  4. <configuration>
  5. <!-- 定义别名 -->
  6. <typeAliases>
  7. <typeAlias type="com.ming.Role" alias="role"/>
  8. </typeAliases>
  9. <!-- 定义数据库信息 -->
  10. <environments default="development">
  11. <environment id="development">
  12. <!-- jdbc事物管理 -->
  13. <transactionManager type="JDBC"></transactionManager>
  14. <!-- 数据库链接信息 -->
  15. <dataSource type="POOLED">
  16. <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  17. <property name="url" value="jdbc:mysql://47.94.95.84:32786/mybatis"/>
  18. <property name="username" value="mybatis"/>
  19. <property name="password" value="ABCcba20170607"/>
  20. </dataSource>
  21. </environment>
  22. </environments>
  23. </configuration>
  24. 复制代码

新建类

  1. package com.ming;
  2. import org.apache.ibatis.io.Resources;
  3. import org.apache.ibatis.session.SqlSessionFactory;
  4. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. public class Role {
  8. public String getSqlSessionFactory(){
  9. String resource = "mybatis-config.xml";
  10. try {// 获得输入流
  11. InputStream inputStream;
  12. inputStream = Resources.getResourceAsStream(resource);
  13. // 获得SqlSessionFactory工厂
  14. SqlSessionFactory sqlSessionFactory = null;
  15. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  16. }catch (IOException e){
  17. e.printStackTrace();
  18. }
  19. return null;
  20. }
  21. }
  22. 复制代码

最后新建测试类

  1. package com.ming;
  2. import org.junit.After;
  3. import org.junit.Before;
  4. import org.junit.Test;
  5. public class RoleTest {
  6. private Role role = null;
  7. @Before
  8. public void setUp() throws Exception {
  9. this.role = new Role();
  10. }
  11. @After
  12. public void tearDown() throws Exception {
  13. }
  14. @Test
  15. public void getSqlSessionFactory() {
  16. role.getSqlSessionFactory();
  17. }
  18. }
  19. 复制代码

此时的目录结构

代码方式构建

  1. public SqlSessionFactory getSqlSessionFactory1(){
  2. // 创建数据库连接池
  3. PooledDataSource dataSource = new PooledDataSource();
  4. dataSource.setDriver("com.mysql.cj.jdbc.Driver");
  5. dataSource.setUrl("jdbc:mysql://47.94.95.84:32786/mybatis");
  6. dataSource.setUsername("mybatis");
  7. dataSource.setPassword("ABCcba20170607");
  8. // 构建数据库事物
  9. TransactionFactory transactionFactory = new JdbcTransactionFactory();
  10. // 创建数据库环境
  11. Environment environment = new Environment("development", transactionFactory, dataSource);
  12. // 构建Configuration对象
  13. Configuration configuration = new Configuration(environment);
  14. // 注册上下文别名
  15. configuration.getTypeAliasRegistry().registerAlias("role", Role.class);
  16. // 创建映射器
  17. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
  18. return sqlSessionFactory;
  19. }
  20. 复制代码

书写测试用例如下

  1. package com.ming;
  2. import org.junit.After;
  3. import org.junit.Before;
  4. import org.junit.Test;
  5. public class RoleTest {
  6. private Role role = null;
  7. @Before
  8. public void setUp() throws Exception {
  9. this.role = new Role();
  10. }
  11. @After
  12. public void tearDown() throws Exception {
  13. }
  14. @Test
  15. public void getSqlSessionFactory() {
  16. role.getSqlSessionFactory();
  17. }
  18. @Test
  19. public void getSqlSessionFactory1() {
  20. role.getSqlSessionFactory1();
  21. }
  22. }
  23. 复制代码

创建SqlSession

SqlSession属于门面,通过SqlSession可以获得需要的什么信息

  1. SqlSession sqlSession = null;
  2. try{
  3. // 创建一个sqlsession会话
  4. sqlSession = sqlSessionFactory.openSession();
  5. sqlSession.commit();
  6. }catch (Exception e){
  7. // 输出错误信息
  8. System.out.println(e.getMessage());
  9. // 进行事物操作,回滚数据库数据
  10. sqlSession.rollback();
  11. }finally {
  12. // 进行资源关闭
  13. if(sqlSession != null){
  14. sqlSession.close();
  15. }
  16. }
  17. 复制代码

SqlSession作用,获取映射器,通过命名信息执行sql结果

映射器

映射器由java和xml文件共同组成,作用 定义参数类型 描述缓存 描述sql 定义查询结果和POJO映射关系

先给出java接口

  1. package com.ming;
  2. public interface RoleMapper {
  3. public Role getRole(Long id);
  4. }
  5. 复制代码

根据给定的id获取角色对象

给出映射文件,然后在生成的时候会根据接口实现类,生成对象.

先编写POJO

  1. package com.ming;
  2. // POJO
  3. public class Role {
  4. private int id;
  5. private String roleName;
  6. private String note;
  7. public void setId(int id) {
  8. this.id = id;
  9. }
  10. public void setRoleName(String roleName) {
  11. this.roleName = roleName;
  12. }
  13. public void setNote(String note) {
  14. this.note = note;
  15. }
  16. public int getId() {
  17. return id;
  18. }
  19. public String getRoleName() {
  20. return roleName;
  21. }
  22. public String getNote() {
  23. return note;
  24. }
  25. }
  26. 复制代码

在编写映射配置文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <!-- 定义接口类 -->
  5. <mapper namespace="com.ming.RoleMapper">
  6. <!-- 定义的接口方法为getRole 类型参数为long 返回的结果为role 即之前定义在xml文件中定义的vo别名 -->
  7. <select id="getRole" parameterType="int" resultType="role">
  8. <!-- 定义sql语句-->
  9. SELECT id, role_name as roleName, note FROM t_role WHERE id = #{id}
  10. </select>
  11. </mapper>
  12. 复制代码

最后编写mybatis,添加映射器配置文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  4. <configuration>
  5. <!-- 定义别名 -->
  6. <typeAliases>
  7. <typeAlias type="com.ming.Role" alias="role"/>
  8. </typeAliases>
  9. <!-- 定义数据库信息 -->
  10. <environments default="development">
  11. <environment id="development">
  12. <!-- jdbc事物管理 -->
  13. <transactionManager type="JDBC"></transactionManager>
  14. <!-- 数据库链接信息 -->
  15. <dataSource type="POOLED">
  16. <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  17. <property name="url" value="jdbc:mysql://47.94.95.84:32786/mybatis"/>
  18. <property name="username" value="mybatis"/>
  19. <property name="password" value="ABCcba20170607"/>
  20. </dataSource>
  21. </environment>
  22. </environments>
  23. <!-- 定义映射器 -->
  24. <mappers>
  25. <mapper resource="RoleMapper.xml"></mapper>
  26. </mappers>
  27. </configuration>
  28. 复制代码

最后再编写执行sql的类

  1. package com.ming;
  2. import org.apache.ibatis.datasource.pooled.PooledDataSource;
  3. import org.apache.ibatis.io.Resources;
  4. import org.apache.ibatis.mapping.Environment;
  5. import org.apache.ibatis.session.Configuration;
  6. import org.apache.ibatis.session.SqlSession;
  7. import org.apache.ibatis.session.SqlSessionFactory;
  8. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  9. import org.apache.ibatis.transaction.TransactionFactory;
  10. import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
  11. import java.io.IOException;
  12. import java.io.InputStream;
  13. public class MyBatis {
  14. public String getSqlSessionFactory(){
  15. String resource = "mybatis-config.xml";
  16. SqlSessionFactory sqlSessionFactory = null;
  17. try {// 获得输入流
  18. InputStream inputStream;
  19. inputStream = Resources.getResourceAsStream(resource);
  20. // 获得SqlSessionFactory工厂
  21. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  22. }catch (IOException e){
  23. e.printStackTrace();
  24. }
  25. SqlSession sqlSession = null;
  26. try{
  27. // 创建一个sqlsession会话
  28. sqlSession = sqlSessionFactory.openSession();
  29. // 获得映射器
  30. // 接口传入映射器中
  31. RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
  32. // 执行方法
  33. Role role = roleMapper.getRole(0);
  34. System.out.println(role.getRoleName());
  35. // 刷新语句并提交链接
  36. sqlSession.commit();
  37. }catch (Exception e){
  38. // 输出错误信息
  39. System.out.println(e.getMessage());
  40. // 进行事物操作,回滚数据库数据
  41. sqlSession.rollback();
  42. }finally {
  43. // 进行资源关闭
  44. if(sqlSession != null){
  45. sqlSession.close();
  46. }
  47. }
  48. return null;
  49. }
  50. public SqlSessionFactory getSqlSessionFactory1(){
  51. // 创建数据库连接池
  52. PooledDataSource dataSource = new PooledDataSource();
  53. dataSource.setDriver("com.mysql.cj.jdbc.Driver");
  54. dataSource.setUrl("jdbc:mysql://47.94.95.84:32786/mybatis");
  55. dataSource.setUsername("mybatis");
  56. dataSource.setPassword("ABCcba20170607");
  57. // 构建数据库事物
  58. TransactionFactory transactionFactory = new JdbcTransactionFactory();
  59. // 创建数据库环境
  60. Environment environment = new Environment("development", transactionFactory, dataSource);
  61. // 构建Configuration对象
  62. Configuration configuration = new Configuration(environment);
  63. // 注册上下文别名
  64. configuration.getTypeAliasRegistry().registerAlias("role", MyBatis.class);
  65. // 创建映射器
  66. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
  67. return sqlSessionFactory;
  68. }
  69. }
  70. 复制代码

最后编写测试类

  1. package com.ming;
  2. import org.junit.After;
  3. import org.junit.Before;
  4. import org.junit.Test;
  5. public class MyBatisTest {
  6. private MyBatis myBatis = null;
  7. @Before
  8. public void setUp() throws Exception {
  9. this.myBatis = new MyBatis();
  10. }
  11. @After
  12. public void tearDown() throws Exception {
  13. }
  14. @Test
  15. public void getSqlSessionFactory() {
  16. myBatis.getSqlSessionFactory();
  17. }
  18. @Test
  19. public void getSqlSessionFactory1() {
  20. myBatis.getSqlSessionFactory1();
  21. }
  22. }
  23. 复制代码

执行单元测试 结果如下

即完成了MyBatis的一次查询

注解

定义接口

  1. package com.ming;
  2. import org.apache.ibatis.annotations.Select;
  3. public interface Role1 {
  4. @Select (value="SELECT id, role_name as roleName, note FROM t_role WHERE id = #{id}")
  5. public Role getRole(int id);
  6. }
  7. 复制代码

生命周期

SqlSessionFactoryBuilder

其是利用xml或者java编码构建SqlSessionFactory 可以构建多个SessionFactory 作用 构建器 根据构建器获得sqlSessionFactory

SqlSessionFactory

创建SqlSession 一个SqlSession相当于JDBC的Connection对象 此为单例管理 每创建一个SqlSession就会创建一个数据库连接

SqlSession

此为一个会话,相当于一个Connection连接 线程不安全 生命周期为一个应用的请求和操作,可以执行多条sql

转载于:https://juejin.im/post/5cab75f8e51d456e2a64b272

发表评论

表情:
评论列表 (有 0 条评论,135人围观)

还没有评论,来说两句吧...

相关阅读