环境搭建
maven的空java项目
项目对象模型(Project Object Model)
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.helin</groupId>
<artifactId>mybatisCRUD</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
</dependencies>
</project>
实体类
User
package com.helin.domain;
import java.io.Serializable;
import java.util.Date;
/**
* @Description: TODO
* @author: husky105
* @Date: 2020-07-23 23:55
*/
public class User implements Serializable {
private Integer id;
private String username;
private String address;
private String sex;
private Date birthday;
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", address='" + address + '\'' +
", sex='" + sex + '\'' +
", birthday=" + birthday +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
config配置文件
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="mysql">
<!-- 配置mysql的环境 -->
<environment id="mysql">
<!-- 配置事务 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 配置映射文件的位置 -->
<mappers>
<mapper resource="com/helin/dao/IUserDao.xml"></mapper>
</mappers>
</configuration>
Mapper配置文件:
com.helin.dao.IUserDao.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="com.helin.dao.IUserDao">
<!-- 查询所有 -->
<select id="findAll" resultType="com.helin.domain.User">
select * from user;
</select>
<!-- 保存用户 -->
<insert id="saveUser" parameterType="com.helin.domain.User">
<!-- 配置插入操作后,获取插入数据的id -->
<!-- keyProperty代表要返回的值的名称,对应实体类中的id
keyColumn对应数据库表中的id
resultType表示返回值的类型
order取值为AFTER代表插入后的行为 -->
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
insert into user(username,address,sex,birthday) values(#{username},#{address},#{sex},#{birthday});
</insert>
<!-- 更新用户 -->
<update id="updateUser" parameterType="com.helin.domain.User">
update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday}where id = #{id};
</update>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id = #{uid}; <!--这里只有一个参数,#{uid}可以随便写,仅仅是一个占位符 -->
</delete>
<!-- 根据id查询用户 -->
<select id="findById" parameterType="INT" resultType="com.helin.domain.User">
select * from user where id = #{uid};
</select>
<!-- 根据名称模糊查询信息 -->
<select id="findByName" parameterType="String" resultType="com.helin.domain.User">
<!-- select * from user where username like #{username};-->
select * from user where username like '%${value}%';
</select>
<!-- 查询总用户数 -->
<select id="findTotal" resultType="int">
select count(id) from user;
</select>
</mapper>
测试文件:
com.helin.test.MybatisTest
package com.helin.test;
import com.helin.dao.IUserDao;
import com.helin.domain.User;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
/**
* @Description: 测试mybatis的CRUD操作
* @author: husky105
* @Date: 2020-07-24 0:09
*/
public class MybatisTest {
private InputStream in;
private SqlSession sqlSession;
private IUserDao userDao;
@Before
public void init() throws IOException {
// 1.读取配置文件,生成字节输入流
in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.获取SqlSessionFactory
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
// 3.获取SqlSession对象
sqlSession = factory.openSession();
// 4.获取dao的代理对象
userDao = sqlSession.getMapper(IUserDao.class);
}
@After
public void destory() throws IOException {
// 提交事务 不要忘记提交事务
sqlSession.commit();
// 释放资源
sqlSession.close();
in.close();
}
/**
* 测试查询所有
*/
@Test
public void testFindAll() throws IOException {
// 5.执行查询所有方法
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
}
/**
* 测试保存操作
*/
@Test
public void testSave() {
User user = new User();
user.setUsername("mybatis saveuser");
user.setAddress("北京市顺义区");
user.setSex("男");
user.setBirthday(new Date());
// 插入前打印user User{id=null, username='mybatis saveuser', address='北京市顺义区', sex='男', birthday=Fri Jul 24 10:02:25 CST 2020}
System.out.println(user);
userDao.saveUser(user);
// 插入后打印User User{id=52, username='mybatis saveuser', address='北京市顺义区', sex='男', birthday=Fri Jul 24 10:02:25 CST 2020}
// 插入后的id被取出来放到user中了
System.out.println(user);
// 提交事务 不要忘记提交事务
sqlSession.commit();
}
/**
* 测试更新操作
*/
@Test
public void testUpdate() {
User user = new User();
user.setId(50);
user.setUsername("mybatis saveuser");
user.setAddress("北京市顺义区");
user.setSex("女");
user.setBirthday(new Date());
userDao.updateUser(user);
}
/**
* 测试删除
*/
@Test
public void testDelete() {
userDao.deleteUser(48);
}
/**
* 测试根据id查询
* @return
*/
@Test
public void testFindById() {
User user = userDao.findById(50);
System.out.println(user);
}
/**
* 测试通过姓名模糊查询
*/
@Test
public void testFindByName() {
List<User> users = userDao.findByName("王");
for (User user : users) {
System.out.println(user);
}
}
/**
* 测试查询总记录条数
*/
@Test
public void testFindTotal() {
int count = userDao.findTotal();
System.out.println(count);
}
}
步骤解读
目录结构:
测试文件的结构:
细节解读
映射配置文件在SqlMapConfig.xml中的配置
在执行插入操作时获取插入的id
sql语句仅有一个参数时
迷糊查询