MyBatis快速入门详解
什么是Mybatis
MyBatis快速入门
- 开发步骤:
- 1.添加MyBatis坐标
```
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
```
* 2.创建User数据表
* 3.编写user实体类
```
public class User {
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
```
* 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">
<mapper namespace="UserMapper">
<select id="findAll" resultType="com.xunmeng.domain.User">
select * from admin
</select>
</mapper>
```
相关属性:
namespace:命名空间,与下面语句id一起组成查询的标识
id:语句的id标识,与上面的命名空间一起组成查询的标识
resultType:查询结果的实体型
* 5.编写核心文件SqlMapConfig.xml
```
<?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">
<configuration>
<!-- 数据源环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="drive" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/girls"/>
<property name="username" value="root"/>
<property name="password" value="lt204330"/>
</dataSource>
</environment>
</environments>
</configuration>
```
* 6.编写测试类
```
@Test
public void MyBatisTest() throws IOException {
//获取核心配置文件的输入流
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//获取Session工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获取Session会话对象
SqlSession sqlSession=sqlSessionFactory.openSession();
//执行操作
List<User> users = sqlSession.selectList("UserMapper.findAll");
//输出数据
System.out.println(users.toString());
//释放资源
sqlSession.close();
}
```
-
MyBatis增删改查操作
- 插入操作
1.UserMapper.xml中的配置
<!--插入语句--> <insert id="save" parameterType="com.xunmeng.domain.User"> insert into admin values (#{id},#{username},#{password}) </insert>
2.测试代码
@Test public void MyBatisInsertTest() throws IOException { //创造一个User对象 User user=new User(); user.setPassword("123456789"); user.setUsername("李小俊"); //获取核心配置文件的输入流 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); //获取Session工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //获取Session会话对象 SqlSession sqlSession=sqlSessionFactory.openSession(); //执行操作 int insert = sqlSession.insert("UserMapper.save", user); //输出数据 System.out.println(insert); //提交事务 sqlSession.commit(); //释放资源 sqlSession.close(); }
千万别忘了事务提交!
- 更新操作
1.UserMapper.xml中的配置
<!--更新语句--> <update id="upuser" parameterType="com.xunmeng.domain.User"> update admin set username=#{username},password=#{password} where id=#{id} </update>
2.测试代码
@Test public void MyBatisUpdateTest() throws IOException { //创造一个User对象 User user=new User(); user.setId(7); user.setPassword("123456789"); user.setUsername("李小龙"); //获取核心配置文件的输入流 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); //获取Session工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //获取Session会话对象 SqlSession sqlSession=sqlSessionFactory.openSession(); //执行操作 int insert = sqlSession.update("UserMapper.upuser", user); //输出数据 System.out.println(insert); //提交事务 sqlSession.commit(); //释放资源 sqlSession.close(); }
- 删除操作
1.UserMapper.xml中的配置
<!--删除语句--> <delete id="delete" parameterType="java.lang.Integer"> delete from admin where id=#{number} </delete>
2.测试代码
@Test public void MyBatisDeleteTest() throws IOException { //获取核心配置文件的输入流 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); //获取Session工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); //获取Session会话对象 SqlSession sqlSession=sqlSessionFactory.openSession(); //执行操作 int delete = sqlSession.delete("UserMapper.delete", 7); //输出数据 System.out.println(delete); //提交事务 sqlSession.commit(); //释放资源 sqlSession.close(); }
- 插入操作
-
MyBatis的核心配置文件的概述
核心文件层级关系- configuration配置
- properties属性
- settings设置
- typeAliases类型别名
- 注意配置的位置,他是在SqlMapConfig.xml配置文件下,且要注意他写的位置。
- typeHandlers类型处理器
- objectFactory对象工厂
- plugins插件
- environments环境
- environment环境变量
- transactionManager事务管理器
- dataSource数据源
- environment环境变量
- databaseIdProvider数据库厂商标识
- mappers映射器
- configuration配置
-
sql语句抽取
- 抽取
<sql id="selectUser">select * from user</sql>
- 引用
<include refid="selectUser"></include>
-
typeHandlers标签
- 开发步骤:
- 定义转换类继承BasetypeHandler
- 覆盖4个未实现的方法,其中setNonNullParameter为java程序设置数据到数据库的回调方法,getNullableResult为查询时mysql的字符串类型转换成java的Type类型的方法
- 在MyBatis核心配置文件中进行注册
- 测试转换是否正确
-
pagehelper插件使用
- 使用步骤
- 导入相关坐标 :pagehelper和jsqlparser,注意版本问题
- 在核心配置文件中申明pagehelper插件
- 测试pagehleper功能
-
MyBatis多表配置方式:
- 一对一配置:使用
<resultMap>
做配置 - 一对多配置:使用
<resultMap>+<collection>
做配置 - 多对多配置:使用
<resultMap>+<collection>
做配置
- 一对一配置:使用