Mybatis
Posted ruckly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis相关的知识,希望对你有一定的参考价值。
1.1. Mybatis的作用
Mybatis是一个持久层框架。连接数据库(别名:JDBC),作用就是操作数据库的(增删改查).
Mybatis的理念:让开发者是10%的代码就可以实现数据库的操作。
解决方案: 持久层(DAO)的零实现. 所谓的零实现,就是不用写实现类代码,直接使用接口就可以操作数据库.(工具类)
Mybatis框架能够让我们以最少的代码就可以操作数据库。从而提高开发的效率!!!
--如何将代码减少呢?
持久层的零实现 (不需要写实现类)
可以自动将数据封装到对象里面不需要手工编写映射的关系
1.2.Mybatis配置流程图
Resources:资源类,用于读取总配置文件
SqlSessionFactoryBuilder:会话工厂构造类,通过读取的总配置文件构建会话工厂
SqlSessionFactory:会话工厂
SqlSession:会话,就是操作数据库的操作类
2. 入门示例
--获得数据库连接
第一步:导入包(任何框架需要的事情)
第二步:创建总配置文件,文件名随便写
第三步:创建一个MybatisUtils工具类,(获得操作对象)
--需求:插入数据到数据库
第四步:创建一个映射接口
第五步:创建一个映射文件
第六步:在总配置文件加载映射文件。
第七步:编写测试插入数据代码
2.1. 配置步骤
2.1.1. 下载mybatis框架
https://github.com/mybatis/mybatis-3
2.1.2. 创建一个普通java项目并导入相关
2.1.3. 创建主配置文件 mybatis-config.xml
在项目的 src 下面创建 配置文件 mybatis-config.xml
具体配置参考mybatis的官方文档即可
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!-- dtd约束 --> 3 <!DOCTYPE configuration 4 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 5 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 6 <!-- 根元素: 用于配置mybatis --> 7 <configuration> 8 <!-- 配置mybatis的运行环境 ,可以配置多个环境,但是一次只能使用一个 9 10 default属性 : 当前使用的环境 ,使用下面环境的id 即可 --> 11 <environments default="dev_mysql"> 12 <!-- 环境配置 id 属性,就是当前环境的表示 --> 13 <environment id="dev_mysql"> 14 <!-- 配置MyBatis事务管理器 15 type属性 : 事物类型 16 JDBC 使用事务(正常提交commit,异常回滚事务 rollback) 默认 17 MANAGED : 不使用事务 18 --> 19 <transactionManager type="JDBC"/> 20 <!-- 配置MyBatis的数据源 21 type : 配置连接池 22 POOLED :mybatis内置的一个连接池(默认) 23 后期都交给spring管理了,配置 dbcp连接池,阿里巴巴的 druid连接池 24 --> 25 <dataSource type="POOLED"> 26 <!-- 连接数据库的操作 --> 27 <!-- 数据库驱动 --> 28 <property name="driver" value="com.mysql.jdbc.Driver"/> 29 <!-- 连接数据库的url --> 30 <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> 31 <!-- 连接数据库账号 --> 32 <property name="username" value="root"/> 33 <!-- 连接数据库密码 --> 34 <property name="password" value="admin"/> 35 </dataSource> 36 </environment> 37 </environments> 38 <!-- 配置映射文件 --> 39 <mappers> 40 <!-- 配置包扫描映射文件 --> 41 <!-- <package name=""/> --> 42 <!-- 配置单个映射文件 --> 43 <mapper resource="org/mybatis/example/BlogMapper.xml"/> 44 </mappers> 45 </configuration>
2.1.4. 创建MyBatisUtil工具类
MyBatisUtil工具类的作用主要用于 读取配置文件,创建工厂对象,提供创建SqlSession数据库操作对象的方法
1 package cn.zj.mybatis.util; 2 3 4 import java.io.InputStream; 5 6 import org.apache.ibatis.io.Resources; 7 import org.apache.ibatis.session.SqlSession; 8 import org.apache.ibatis.session.SqlSessionFactory; 9 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 10 11 public class MyBatisUtil 12 private MyBatisUtil() 13 14 15 //SqlSessionFactory 会话工厂对象 16 private static SqlSessionFactory factory; 17 //类加载到JVM中就立马执行static代码块,并且只会执行一次 18 static 19 //资源文件 20 String resource = "mybatis-config.xml"; 21 //try()catch(Exception e) try的圆括号内部能够自动释放/关闭资源 22 try(InputStream inputStream = Resources.getResourceAsStream(resource)) 23 //创建SqlSessionFactory 对象 24 factory = new SqlSessionFactoryBuilder().build(inputStream); 25 catch (Exception e) 26 e.printStackTrace(); 27 28 29 30 /** 31 * 创建SqlSession对象 32 * @return SqlSession对 33 */ 34 public static SqlSession openSession() 35 //创建Session对象 36 SqlSession session = factory.openSession(); 37 return session; 38 39 40
2.1.5. 创建数据库表对应的实体类
1 package cn.zj.mybatis.pojo; 2 3 public class User 4 private Integer id; 5 private String name; 6 private String password; 7 private Integer age; 8 9 public User() 10 super(); 11 12 13 public User(Integer id, String name, String password, Integer age) 14 super(); 15 this.id = id; 16 this.name = name; 17 this.password = password; 18 this.age = age; 19 20 21 public Integer getId() 22 return id; 23 24 25 public void setId(Integer id) 26 this.id = id; 27 28 29 public String getName() 30 return name; 31 32 33 public void setName(String name) 34 this.name = name; 35 36 37 public String getPassword() 38 return password; 39 40 41 public void setPassword(String password) 42 this.password = password; 43 44 45 public Integer getAge() 46 return age; 47 48 49 public void setAge(Integer age) 50 this.age = age; 51 52 53 @Override 54 public String toString() 55 return "User [id=" + id + ", name=" + name + ", password=" + password + ", age=" + age + "]"; 56 57 58
2.2.6. 创建一个操作接口
1 package cn.zj.mybatis.mapper; 2 3 import cn.zj.mybatis.pojo.User; 4 5 /* 6 * 使用MyBatis的动态代理开发编写代码遵循四个原则 7 * 1.映射文件的namespace命名空间的值必须是对应接口的全限定名 8 2.映射文件的对应功能 id值必须等于映射接口中方法的名称 9 3.映射文件的参数类型必须和接口中方法的参数类型一致 10 4.映射文件查询的返回结果类型必须和接口的方法的返回数据类型一致, 11 DML操作返回的受影响的行数,除外 12 */ 13 public interface UserMapper 14 15 int insertUserInfo(User u); 16
2.1.7. 创建表对应的映射文件 :UserMapper.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <!-- 配置映射 6 namespace : 命名空间(通俗说法: 给当前映射文件的唯一标识:起一个唯一的名字) 7 --> 8 <mapper namespace="cn.zj.mybatis.pojo.UserMapper"> 9 <!-- 新增操作 10 id: 当前功能的唯一标识,和接口方法同名 11 parameterType : 参数的类型 12 useGeneratedKeys:是否返回数据库生成的主键 true是/false否 13 keyProperty : 数据库主键对应java的pojo对象的属性 14 keyColumn : 数据表的主键列明 15 --> 16 <insert id="insertUserInfo" parameterType="User" 17 useGeneratedKeys="true" 18 keyProperty="id" 19 keyColumn="id" 20 ></mapper>
2.1.8. 创建测试类准备测试
1 2 //插入操作 3 // 新增操作 4 @Test 5 public void testInsert() throws Exception 6 //1.创建SqlSession操作对象 7 SqlSession session = MyBatisUtil.openSession(); 8 9 //2.创建UserMapper接口的代理对象 10 UserMapper userMapper = session.getMapper(UserMapper.class); 11 12 13 //3.创建用户对象 14 User user = new User(null, "乔峰", "qf", 30); 15 16 //4.执行UserMapper的插入操作 17 userMapper.insertUserInfo(user); 18 19 //5.提交事务 20 session.commit(); 21 22 //6.关闭session 23 session.close(); 24 25
以上是关于Mybatis的主要内容,如果未能解决你的问题,请参考以下文章