02.Mybatis-CRUD-非业务写法
此mybatis是非业务写法,企业开发中不建议这样写,此篇文章仅仅是献给想了解mybatis的的同学,以达到快速上手的目的。后面我将逐一介绍企业中是如何用mybatis的,大家不要着急。
此文章是连载文文章,文章之间有关联性,欢迎订阅我的专栏Mybatis
增
1. 整合junit单元测试
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
2. 整合日志
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.14.0</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>2.0.0-alpha0</version>
</dependency>
下面这个文件spring自动识别,注意需要放在resouces根目录下
log4j.properties
log4j.rootLogger=debug,stdout
log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ServerDailyRollingFile.DatePattern='.'yyyy-MM-dd
log4j.appender.ServerDailyRollingFile.File=logs/notify-subscription.log
log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d - %m%n
log4j.appender.ServerDailyRollingFile.Append=true
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n method:%l%n%m%n
整合完后,我们可以看到日志中,有SQL输出语句
我将代码放在这里www.123pan.com/s/8AB0Vv-Sg… ,供大家查看,这里注意,Main测试类中,编写了一个单例模式。
3. 编写UserMapper.xml
<insert id="addUser" parameterType="com.lzh.mybatis01.model.User">
insert user (username,address) values(#{username},#{address})
</insert>
添加insert,往数据表中插入数据。
这里的parameterType属性指的是插入到数据表的类型参数。
4. 新建测试类
package com.lzh.mybatis01;
import com.lzh.mybatis01.model.User;
import com.lzh.mybatis01.utils.SqlSessionFactoryUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
/**
* @Author:kaiyang.cui
* @Package:com.lzh.mybatis01
* @Project:mybatis01
* @name:MyTest
* @Date:2023/3/31 下午6:48
* @Filename:MyTest
* @Description:MyTest
* @Version:1.0
*/
@Slf4j
public class MyTest {
private SqlSession sqlSession;
@Before
public void before() throws IOException {
sqlSession = SqlSessionFactoryUtils.getInstance().openSession();
}
@Test
public void addUser(){
User user = new User();
user.setUsername("kaiyang");
user.setAddress("江苏省南京市");
int rows = sqlSession.insert("com.lzh.mybatis01.mapper.UserMapper.addUser", user);
log.info("插入完成" + ",受影响的行数为" + rows);
sqlSession.commit();
}
@After
public void after() {
sqlSession.close();
}
}
执行单元测试,可以发现,我们的数据表中多了一条插入记录:
本小节码:www.123pan.com/s/8AB0Vv-lg…
增-将主键设置为uuid 【方式1】
1. 修改User实体类
private String id;
2. 修改数据库
- 改id字段类型为 varchar 127
- 去掉自增
3. 新增单元测试类代码
@Test
public void addUserUUID(){
String userUUID = UUID.randomUUID().toString();
User user = new User();
user.setId(userUUID);
user.setUsername("kaiyang");
user.setAddress("江苏省南京市");
int rows = sqlSession.insert("com.lzh.mybatis01.mapper.UserMapper.addUser", user);
log.info("插入完成" + ",受影响的行数为" + rows);
sqlSession.commit();
}
4. 修改UserMapper.xml 为
<insert id="addUser" parameterType="com.lzh.mybatis01.model.User">
insert user (id,username,address) values(#{id},#{username},#{address})
</insert>
5. 运行单元测试
插入uuid完成,受影响的行数为1
可以看到,我们将uuid作为用户主键类。这样我们的程序就完成了。
增-将主键设置为uuid 【方式2】
1. 新增单元测试
@Test
public void addUserUUID2(){
User user = new User();
user.setUsername("我是一名程序媛");
user.setAddress("上海市");
int rows = sqlSession.insert("com.lzh.mybatis01.mapper.UserMapper.addUser", user);
log.info("插入uuid完成" + ",受影响的行数为" + rows);
sqlSession.commit();
}
2. 修改UserMapper.xml
<insert id="addUser" parameterType="com.lzh.mybatis01.model.User">
<selectKey resultType="java.lang.String" keyProperty="id" order="BEFORE">
select uuid();
</selectKey>
insert user (id,username,address) values(#{id},#{username},#{address})
</insert>
运行单元测试addUserUUID2,查看数据表结果
本小节源码:www.123pan.com/s/8AB0Vv-7g…
删
在删之前呢,我们先把数据库改回id自增,int 11
修改实体类User
private Long id;
1. 在UserMapper.xml新增如下
<delete id="deleteUser" parameterType="java.lang.Long">
delete from user where id = #{id}
</delete>
2. 新增如下单元测试
@Test
public void deleteUser(){
int rows = sqlSession.delete("com.lzh.mybatis01.mapper.UserMapper.deleteUser", 4L);
sqlSession.commit();
log.info("删除数据表中id=4的用户记录完成" + ",受影响的行数为" + rows);
}
传入是4L 并不是4。因为在UserMapper.xml中,我们规定传入的参数是java.long.Long类型的。
改
删除前数据表
1.在UserMapper.xml 中新增如下
<update id="updateUser" parameterType="com.lzh.mybatis01.model.User">
update user set username = #{username} where id = #{id}
</update>
2. 新增单元测试
@Test
public void updateUser(){
User user = new User();
user.setId(8L);
user.setUsername("lll");
int rows = sqlSession.update("com.lzh.mybatis01.mapper.UserMapper.deleteUser", user);
sqlSession.commit();
}
3. 运行单元测试及结果
本小节源码:www.123pan.com/s/8AB0Vv-bg…
查
1. 在UserMapper.xml 中新增如下
<select id="getUserById" resultType="com.lzh.mybatis01.model.User">
select id,username,address from user where id = #{id}
</select>
2. 新增单元测试
@Test
public void getUserById(){
User user = (User) sqlSession.selectOne("com.lzh.mybatis01.mapper.UserMapper.getUserById", 8L);
// 查询涉及到修改数据库,所以可以去掉下面这一行commit
sqlSession.commit();
log.info(user.toString());
}
3. 运行单元测试及结果
User(id=8, username=lll, address=江苏省南京市)
本小节源码和本文源码:www.123pan.com/s/8AB0Vv-Zg…
好了,mybatis CRUD已经介绍完了。 本文是mybatis连载文章,欢迎我的订阅mybatis专栏。