mybatis学习: 对user的CRUD操作
文章目录
项目目录结构:

mybatis配置文件
mybatis-config.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>
<properties resource="db.properties"/>
<settings>
<!-- <setting name="logImpl" value="STDOUT_LOGGING"/>-->
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<package name="com.shuang.mybatis.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/shuang/mybatis/mapper/UserMapper.xml"/>
</mappers>
</configuration>
配置连接数据库的四要素
db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis_base?useSSL=false&useUnicode=true&characterEncoding=utf8
username=root
password=123456
日志配置
log4j.properties
#\u5C06\u7B49\u7EA7\u4E3ADEBUG\u7684\u65E5\u5FD7\u4FE1\u606F\u8F93\u51FA\u5230console\u548Cfile\u8FD9\u4E24\u4E2A\u76EE\u7684\u5730\uFF0Cconsole\u548Cfile\u7684\u5B9A\u4E49\u5728\u4E0B\u9762\u7684\u4EE3\u7801
log4j.rootLogger=DEBUG,console,file
#\u63A7\u5236\u53F0\u8F93\u51FA\u7684\u76F8\u5173\u8BBE\u7F6E
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
#\u6587\u4EF6\u8F93\u51FA\u7684\u76F8\u5173\u8BBE\u7F6E
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/ls.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n
#\u65E5\u5FD7\u8F93\u51FA\u7EA7\u522B
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
pojo
User实体类:
package com.shuang.mybatis.pojo;
import java.math.BigDecimal;
/**
* @author lyr
*/
public class User {
private Long id;
private String name;
private Integer age;
private BigDecimal salary;
public User(Long id, String name, Integer age, BigDecimal salary) {
this.id = id;
this.name = name;
this.age = age;
this.salary = salary;
}
public User() {
}
public User(String name, Integer age, BigDecimal salary) {
this(null, name, age, salary);
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public BigDecimal getSalary() {
return salary;
}
public void setSalary(BigDecimal salary) {
this.salary = salary;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", salary=" + salary +
'}';
}
}
dao层接口:
package com.shuang.mybatis.dao;
import com.shuang.mybatis.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author Shuang_Ls
*/
public interface IUserDao {
int save(User user);
int removeById(Long id);
int updateById(User user);
User selectById(Long id);
List<User> select();
}
mapperxml文件:
<?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="com.shuang.mybatis.mapper.UserMapper">
<insert id="save" parameterType="user">
insert into user (name, age, salary)
values (#{name}, #{age}, #{salary});
</insert>
<delete id="removeById" parameterType="long">
delete
from user
where id = #{id};
</delete>
<update id="updateById" parameterType="user">
update user
set name=#{name},
age=#{age},
salary=#{salary}
where id = #{id};
</update>
<select id="select" resultType="user" parameterType="object">
select *
from user
where 1=1
<if test="id!=null">
and id=#{id}
</if>;
</select>
</mapper>
工具类的提取:
这个类主要用于获得SqlSession对象,以及关闭SqlSession资源
package com.shuang.mybatis.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
/***
* @author lyr
* Version: V1.0
*/
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
// 资源加载
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// 通过对配置文件的解析,最终得到Configuration对象来创建sqlSessionFactory对象
if (inputStream != null) {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
//获得SqlSession对象
public static SqlSession getSqlSession() {
// 设置自动提交事务
return sqlSessionFactory.openSession(true);
}
// 通过反射关闭sqlSession
public static void SqlSessionClose(MybatisCRUDTUtil o) {
try {
Class<?> clazz = o.getClass();
Method close = clazz.getDeclaredMethod("closeSqlSession");
close.setAccessible(true);
close.invoke(o);
} catch (Exception e) {
e.printStackTrace();
}
}
}
提供公用的CRUD操作:
package com.shuang.mybatis.utils;
import com.shuang.mybatis.pojo.User;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
/**
* @author lyr
*/
public class MybatisCRUDTUtil {
// 通过上面的工具类来获得sqlSession对象
private static final SqlSession SQL_SESSION = MybatisUtil.getSqlSession();
// 执行语句前缀
private static final String NAMESPACE_PREFIX = "com.shuang.mybatis.mapper.UserMapper.";
// 单例设计
private static MybatisCRUDTUtil instance;
private MybatisCRUDTUtil(){}
// 通用 增 / 删 / 改 /方法
public static int commentDML(String statementId, Object o) {
// 因为底层都是使用的update方法,所以我们也可以直接使用
return SQL_SESSION.update(getNameSpace(statementId), o);
}
// 查询通过条件 (id)
public static User commentDQL(String statementId, Object o) {
return (User) SQL_SESSION.selectList(getNameSpace(statementId), o).get(0);
}
// 查询所有
public static List<User> commentDQL(String statementId) {
return SQL_SESSION.selectList(getNameSpace(statementId), null);
}
private static String getNameSpace(String id) {
return NAMESPACE_PREFIX + id;
}
private void closeSqlSession(){
SQL_SESSION.close();
}
public static MybatisCRUDTUtil getInstance(){
if (instance == null) {
instance = new MybatisCRUDTUtil();
}
return instance;
}
}
UserDaoimpl 实现类:
package com.shuang.mybatis.dao.impl;
import com.shuang.mybatis.dao.IUserDao;
import com.shuang.mybatis.pojo.User;
import com.shuang.mybatis.utils.MybatisCRUDUtil;
import java.util.List;
/**
* @author lyr
*/
public class UserDaoImpl implements IUserDao {
MybatisCRUDUtil crudUtil = MybatisCRUDUtil.getInstance();
@Override
public int save(User user) {
return crudUtil.commentDML("save",user);
}
@Override
public int removeById(Long id) {
return crudUtil.commentDML("removeById",id);
}
@Override
public int updateById(User user) {
return crudUtil.commentDML("updateById",user);
}
@Override
public User selectById(Long id) {
return crudUtil.commentDQL("select",id);
}
@Override
public List<User> select() {
return crudUtil.commentDQL("select");
}
}
测试类:
package DemoCRUD;
import com.shuang.mybatis.dao.IUserDao;
import com.shuang.mybatis.dao.impl.UserDaoImpl;
import com.shuang.mybatis.pojo.User;
import com.shuang.mybatis.utils.MybatisCRUDUtil;
import org.junit.Test;
import java.math.BigDecimal;
import java.util.List;
/**
* @author lyr
*/
public class UserDaoImplTest {
private IUserDao dao = new UserDaoImpl();
@Test
public void save() {
int i = dao.save(new User("张三", 18, new BigDecimal("10000")));
System.out.println(i);
}
@Test
public void removeById() {
int i = dao.removeById(10L);
System.out.println(i);
}
@Test
public void updateById() {
dao.updateById(new User(11L,"张三", 88, new BigDecimal("10000")));
}
@Test
public void select() {
User user = dao.selectById(11L);
System.out.println(user);
}
@Test
public void selectId() {
List<User> list = dao.select();
list.forEach(System.out::println);
}
}
测试结果全部成功:

676

被折叠的 条评论
为什么被折叠?



