mybatis框架
简介:mabatis是一个持久层(DAO)框架,其作用是操作数据库的增删改查。Mybatis框架能够让我们以最少的代码就可以操作数据库,从而提高开发的效率
mybatis配置流程
获得数据库连接
1. 导入包(使用任何框架都需要做的事情) 先下载好mybatis框架(https://github.com/mybatis/mybatis-3),然后创建一个普通的java项目并导入下载好的jar
2. 创建总配置文件,文件名随便取,但建议要见名知意(这里取mybatis.xml)。在项目的src下面创建文件 mybatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!-- dtd约束 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 根元素: 用于配置mybatis -->
<configuration>
<!-- 配置mybatis的运行环境 ,可以配置多个环境,但是一次只能使用一个
default属性 : 当前使用的环境 ,使用下面环境的id 即可 -->
<environments default="dev_mysql">
<!-- 环境配置 id 属性,就是当前环境的表示 -->
<environment id="dev_mysql">
<!-- 配置MyBatis事务管理器
type属性 : 事物类型
JDBC 使用事务(正常提交commit,异常回滚事务 rollback) 默认
MANAGED : 不使用事务
-->
<transactionManager type="JDBC"/>
<!-- 配置MyBatis的数据源
type : 配置连接池
POOLED :mybatis内置的一个连接池(默认)
后期都交给spring管理了,配置 dbcp连接池,阿里巴巴的 druid连接池
-->
<dataSource type="POOLED">
<!-- 连接数据库的操作 -->
<!-- 数据库驱动 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!-- 连接数据库的url -->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<!-- 连接数据库账号 -->
<property name="username" value="root"/>
<!-- 连接数据库密码 -->
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments>
<!-- 配置映射文件 -->
<mappers>
<!-- 配置包扫描映射文件 -->
<!-- <package name=""/> -->
<!-- 配置单个映射文件 -->
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
3. 创建一个MybatisUtil工具类(获取操作对象)
//MyBatisUtil工具类的作用主要用于:读取配置文件,
//创建工厂对象,提供创建SqlSession数据库操作对象的方法
package cn.zj.mybatis.util;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
private MyBatisUtil() {
}
//SqlSessionFactory 会话工厂对象
private static SqlSessionFactory factory;
//类加载到JVM中就立马执行static代码块,并且只会执行一次
static {
//资源文件
String resource = "mybatis-config.xml";
//try(){}catch(Exception e){} try的圆括号内部能够自动释放/关闭资源
try(InputStream inputStream = Resources.getResourceAsStream(resource)) {
//创建SqlSessionFactory 对象
factory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 创建SqlSession对象
* @return SqlSession对
*/
public static SqlSession openSession() {
//创建Session对象
SqlSession session = factory.openSession();
return session;
}
}
需求:插入数据到数据库 创建一个映射接口
package cn.zj.mybatis.mapper;
import cn.zj.mybatis.pojo.User;
/*
* 使用MyBatis的动态代理开发编写代码遵循四个原则
* 1.映射文件的namespace命名空间的值必须是对应接口的全限定名
2.映射文件的对应功能 id值必须等于映射接口中方法的名称
3.映射文件的参数类型必须和接口中方法的参数类型一致
4.映射文件查询的返回结果类型必须和接口的方法的返回数据类型一致,
DML操作返回的受影响的行数,除外
*/
public interface UserMapper {
int insertUserInfo(User u);
}
4. 创建一个映射文件UserMapper.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">
<!-- 配置映射
namespace : 命名空间(通俗说法: 给当前映射文件的唯一标识:起一个唯一的名字)
-->
<mapper namespace="com.mybatis.pojo.UserMapper">
<!-- 新增操作
id: 当前功能的唯一标识,和接口方法同名
parameterType : 参数的类型
useGeneratedKeys:是否返回数据库生成的主键 true是/false否
keyProperty : 数据库主键对应java的pojo对象的属性
keyColumn : 数据表的主键列明
-->
<insert id="insertUserInfo" parameterType="User"
useGeneratedKeys="true"
keyProperty="id"
keyColumn="id"
></mapper>
5. 创建与数据库对应的实体类
package cn.zj.mybatis.pojo;
public class User {
private Integer id;
private String name;
private String password;
public User() {
super();
}
public User(Integer id, String name, String password) {
super();
this.id = id;
this.name = name;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + "]";
}
}
6. 编写测试插入数据代码
//插入操作
// 新增操作
@Test
public void testInsert() throws Exception {
//1.创建SqlSession操作对象
SqlSession session = MyBatisUtil.openSession();
//2.创建UserMapper接口的代理对象
UserMapper userMapper = session.getMapper(UserMapper.class);
//3.创建用户对象
User user = new User(null, "赵云", "12345");
//4.执行UserMapper的插入操作
userMapper.insertUserInfo(user);
//5.提交事务
session.commit();
//6.关闭session
session.close();
}