Mybatis框架|使用代理模式进行增删改查操作


文章使用的数据库表仍然为之前测试时使用的user表—数据库表在本文中

相比于原始dao开发代码重复率高且存在硬编码不利于系统维护,使用Mybatis的代理模式,解决了这些问题,并且不需要再写实现类,但是需要遵循4个开发约束。下面介绍Mybatis的代理模式。

一、代理模式的4条开发约束

  • namespace与接口的全限定名保持一致。
  • id与接口中的方法名保持一致。
  • parameterType与接口中的参数类型保持一致。
  • resultType与接口中的方法返回值保持一致。
    在这里插入图片描述

二、使用代理模式进行增删改查

1.定义接口

该接口包含了增删改查操作。

package com.gql.mapper;

import java.util.List;

import com.gql.pojo.User;
/**
 * 类说明:
 *		接口
 * @guoqianliang1998.
 */
public interface UserMapper {
	User getUserById(int id);
	
	List<User> getUserListByName(String name);
	
	void saveUser(User user);
	
	void updateUser(User user);
	
	void deleteUser(int id);
}

2.配置sql语句

该配置包含增删改查操作,与接口一一对应

<?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.gql.mapper.UserMapper">
	<select id="getUserById" parameterType="int" resultType="com.gql.pojo.User">
		SELECT id,username as name,sex,address,birthday FROM user WHERE id = #{id};
	</select>
	
	<insert id="saveUser" parameterType="com.gql.pojo.User">
		<selectKey keyProperty="id" order="AFTER" resultType="int">
			select last_insert_ID();
		</selectKey>
		insert into user
		(username,sex,address,birthday)
		values(#{name},#{sex},#{address},#{birthday});
	</insert>
	
	<select id="getUserListByName" parameterType="java.lang.String" resultType="com.gql.pojo.User">
		SELECT id,
		username as name,
		sex,
		address,
		birthday 
		FROM user 
		WHERE username like '%${value}%';
	</select>
	
	<update id="updateUser" parameterType="com.gql.pojo.User">
		UPDATE user SET 
		username=#{name},
		sex=#{sex},
		address=#{address},
		birthday=#{birthday}
		WHERE id=#{id};
	</update>
	
	<delete id="deleteUser" parameterType="int">
		delete from user where id=#{id};
	</delete>
</mapper>

3.全局配置

<?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" />
			<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="Hudie" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="UserMapper.xml" />
	</mappers>
</configuration>

4.使用Mybatis测试增删改查

package com.gql.mapper;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

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.Before;
import org.junit.Test;

import com.gql.pojo.User;

public class UserMapperTest {
	private SqlSessionFactory sqlSessionFactory;
	@Before
	public void init() throws IOException{
		String resource = "mybatis-config.xml";
		InputStream in = Resources.getResourceAsStream(resource);
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);		
	}
	
	@Test
	public void testGetUserById(){
		SqlSession session = sqlSessionFactory.openSession();
		UserMapper userMapper = session.getMapper(UserMapper.class);
		User user = userMapper.getUserById(1);
		System.out.println(user.getName());
	}
	
	@Test
	public void testSaveUser(){
		SqlSession session = sqlSessionFactory.openSession();
		UserMapper userMapper = session.getMapper(UserMapper.class);
		User user = new User();
		user.setName("蔡小坤");
		userMapper.saveUser(user);
		session.commit();
	}
	
	@Test
	public void testGetUserListByName(){
		SqlSession session = sqlSessionFactory.openSession();
		UserMapper userMapper = session.getMapper(UserMapper.class);
		List<User> userList = userMapper.getUserListByName("小");
		System.out.println(userList.size());
	}
	
	@Test
	public void testUpdateUser(){
		SqlSession session = sqlSessionFactory.openSession();
		UserMapper userMapper = session.getMapper(UserMapper.class);
		User user = new User();
		user.setName("钟南山");
		user.setAddress("上海");
		user.setSex("男");
		user.setId(9);
		user.setBirthday(new Date());
		userMapper.updateUser(user);
		session.commit();
	}
	
	@Test
	public void testDeleteUser(){
		SqlSession session = sqlSessionFactory.openSession();
		UserMapper userMapper = session.getMapper(UserMapper.class);
		userMapper.deleteUser(6);
		session.commit();
	}
}

分别运行对上述单元测试,均能正确执行操作,最后的数据库如下:
在这里插入图片描述

发布了413 篇原创文章 · 获赞 1081 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/weixin_43691058/article/details/104232413
今日推荐