MybatisがCRDU操作を実現
Mavenプロジェクトを作成し、pomファイルに座標を追加します
pom.xml
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
ユーザーエンティティクラス:
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
//此处省略了getXXX(),setXXX(),toString()方法
}
UserMapperインターフェース:
public interface UserMapper {
//在这里面添加CRUD方法
}
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">
<!-- mybatis的主配置文件 -->
<configuration>
<!--读取jdbc配置文件-->
<properties resource="jdbc\jdbc.properties"></properties>
<environments default="mysql">
<!-- 配置mysql的环境-->
<environment id="mysql">
<!-- 配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源(连接池) -->
<dataSource type="POOLED">
<!-- 配置连接数据库的4个基本信息 -->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<mapper resource="com/zy/dao/UserMapper.xml"/>
</mappers>
</configuration>
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="com.zy.dao.UserMapper">
<!--这里写具体的sql语句-->
</mapper>
jdbc.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456
IDに基づいてユーザーをクエリする
UserMapperインターフェースの追加メソッド
/***
* @Description 根据id查询用户
* @Param: [userId]
* @return: com.zy.domin.User
* @Date: 2021/2/24
*/
User findUserById(Integer userId);
UserMapper.xml addsqlステートメント
<!--
根据id查询用户
resultType属性:指定结果集的类型
parameterType属性:指定传入参数的类型
-->
<select id="findUserById" resultType="com.zy.domin.User" parameterType="java.lang.Integer">
select * from user where id = #{
userId}
</select>
テストコード:
public class MybatisTest {
private InputStream in;
private SqlSessionFactoryBuilder builder;
private SqlSessionFactory factory;
private SqlSession session;
private UserMapper userMapper;
@Before//在test方法执行之前执行
public void befor() throws Exception {
//读取SqlMapConfig.xml配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//创建SqlSessionFactory工厂
builder = new SqlSessionFactoryBuilder();
factory = builder.build(in);
//使用工厂生产SqlSession
session = factory.openSession();
//使用SqlSession创建dao接口代理对象
userMapper = session.getMapper(UserMapper.class);
}
@After//在test方法执行之后执行
public void after() throws Exception{
session.commit();
session.close();
in.close();
}
/***
* @Description 根据id查询用户
* @Param: []
* @return: void
* @Date: 2021/2/24
*/
@Test
public void testFindUserById(){
User user = userMapper.findUserById(2);
System.out.println(user);
}
ユーザーアクションを保存する
UserMapperインターフェースの追加メソッド
/***
* @Description 保存用户
* @Param: [user]
* @return: void
* @Date: 2021/2/24
*/
void saveUser(User user);
UserMapper.xml addsqlステートメント
<!--保存用户-->
<insert id="saveUser" parameterType="com.zy.domin.User" useGeneratedKeys="true" keyProperty="id">
insert into user (username,birthday,sex,address) values(#{
username}, #{
birthday}, #{
sex}, #{
address})
</insert>
テストコード:
@Test
public void testSaveUser(){
User user = new User();
user.setUsername("李四");
user.setBirthday(new Date());
user.setSex("男");
user.setAddress("河南省郑州市");
System.out.println("保存之前的数据为:" + user);
userMapper.saveUser(user);
System.out.println("保存之后的数据为:" + user);
}
useGeneratedKeys = "true"属性は、挿入ステートメントで使用されます。この属性のデフォルト値はfalseです。挿入操作の後、自動インクリメントされたIDを取得できません。自動インクリメントIDを使用する必要がある場合は、属性の値をtrueに設定する必要があります。新しく追加されたデータの自己インクリメントIDを取得する別の方法があります。次のコードです。
<!--保存用户-->
<insert id="saveUser" parameterType="com.zy.domin.User">
<!--
order AFTER 表示 SELECT LAST_INSERT_ID() 在insert执行之后执行
BEFORE 表示 SELECT LAST_INSERT_ID() 在insert执行之前执行,这样的话就拿不到主键了
-->
<selectKey keyProperty="id" resultType="Integer" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
insert into user (username,birthday,sex,address) values(#{
username}, #{
birthday}, #{
sex}, #{
address})
</insert>
上記のコードをテストします。
/***
* @Description 测试保存用户
* @Param: []
* @return: void
* @Date: 2021/2/24
*/
@Test
public void testSaveUser(){
User user = new User();
user.setUsername("李四2");
user.setBirthday(new Date());
user.setSex("男");
user.setAddress("河南省郑州市");
System.out.println("保存之前的数据为:" + user);
userMapper.saveUser(user);
System.out.println("保存之后的数据为:" + user);
}
更新、削除操作
UserMapperインターフェースの追加メソッド
/***
* @Description 更新用户
* @Param: [user]
* @return: void
* @Date: 2021/2/24
*/
void updateUser(User user);
/***
* @Description 根据id删除用户
* @Param: [userId]
* @return: java.lang.Integer
* @Date: 2021/2/24
*/
Integer deleteUserById(Integer userId);
UserMapper.xml addsqlステートメント
<!--更新用户-->
<update id="updateUser" parameterType="com.zy.domin.User">
update user set username=#{
username},birthday=#{
birthday},sex=#{
sex},address=#{
address} where id=#{
id}
</update>
<!--删除用户信息-->
<delete id="deleteUserById" parameterType="java.lang.Integer">
delete from user where id = #{
id}
</delete>
テストコード
@Test
public void testUpdateUser(){
//查询出我们要更新的数据
User user = userMapper.findUserById(1);
//设置值
user.setSex("女");
//执行更新
userMapper.updateUser(user);
System.out.println(user);
}
/***
* @Description 删除用户
* @Param: []
* @return: void
* @Date: 2021/2/24
*/
@Test
public void testDeleteUserById(){
Integer i = userMapper.deleteUserById(12);
System.out.println(i);
}
ファジークエリ
UserMapperインターフェースの追加メソッド
/***
* @Description 根据用户名模糊查询
* @Param: [name]
* @return: java.util.List<com.zy.domin.User>
* @Date: 2021/2/24
*/
List<User> findUserByName(String name);
UserMapper.xml addsqlステートメント
<!--模糊查询-->
<select id="findUserByName" parameterType="java.lang.String" resultType="com.zy.domin.User">
SELECT * FROM user WHERE username LIKE #{
name};
</select>
テストコード
/***
* @Description 根据名字模糊查询
* @Param: []
* @return: void
* @Date: 2021/2/24
*/
@Test
public void testFindUserByName(){
List<User> users = userMapper.findUserByName("%张%");
for (User user : users){
System.out.println(user);
}
}
ファジークエリを作成する別の方法:
UserMapper.xmlのSQLステートメントを変更する
<!--模糊查询-->
<select id="findUserByName" parameterType="java.lang.String" resultType="com.zy.domin.User">
<!-这种${
value}是固定写法,必须是value,因为源码中指定了读取的 key 的名字就是”value”,所以我们在绑定参数时就只能叫value了-->
select * from user where username like '%${value}%'
</select>
テストコードを変更する
@Test
public void testFindUserByName(){
List<User> users = userMapper.findUserByName("张");
for (User user : users){
System.out.println(user);
}
}
クエリデータの合計レコード
UserMapperインターフェースの追加メソッド
/***
* @Description 查询总记录数
* @Param: []
* @return: java.lang.Integer
* @Date: 2021/2/24
*/
Integer findTotal();
UserMapper.xml addsqlステートメント
<!--查询总记录数-->
<select id="findTotal" resultType="java.lang.Integer">
select count(*) from user;
</select>
テストコード
/***
* @Description 查询总记录数
* @Param: []
* @return: void
* @Date: 2021/2/24
*/
@Test
public void testFindTotal(){
Integer total = userMapper.findTotal();
System.out.println("查询的总记录数为:" + total);
}