欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis对数据库表数据进行CRUD操作

程序员文章站 2022-05-02 20:28:28
...

Mybatis对数据库表数据进行CRUD操作

  • 1 导入相关jar包

如图所示
Mybatis对数据库表数据进行CRUD操作

  • 2 创建实体类

/**@文件名: UserInfo.java
 * @类功能说明: 用户的实体
 * @作者: LiYuHui
 * @Email: aaa@qq.com
 * @日期: 2020年6月16日下午2:20:17
 * @修改说明:<br> 
 * <pre>
 * 	 <li>作者: LiYuHui</li> 
 * 	 <li>日期: 2020年6月16日下午2:20:17</li> 
 *	 <li>内容: </li>
 * </pre>
 */
public class UserInfo {
	private Integer uId;	//用户编号
	private String uName;	//用户名
	private String uPwd;	//用户密码
	private int delflag;	//删除标记(0或1)
	
	public UserInfo() {}

	public UserInfo(String uName, String uPwd, int delflag) {
		this.uName = uName;
		this.uPwd = uPwd;
		this.delflag = delflag;
	}

	public UserInfo(Integer uId, String uName, String uPwd, int delflag) {
		this.uId = uId;
		this.uName = uName;
		this.uPwd = uPwd;
		this.delflag = delflag;
	}

	public Integer getuId() {
		return uId;
	}

	public void setuId(Integer uId) {
		this.uId = uId;
	}

	public String getuName() {
		return uName;
	}

	public void setuName(String uName) {
		this.uName = uName;
	}

	public String getuPwd() {
		return uPwd;
	}

	public void setuPwd(String uPwd) {
		this.uPwd = uPwd;
	}

	public int getDelflag() {
		return delflag;
	}

	public void setDelflag(int delflag) {
		this.delflag = delflag;
	}

	@Override
	public String toString() {
		return "UserInfo [uId=" + uId + ", uName=" + uName + ", uPwd=" + uPwd + ", delflag=" + delflag + "]";
	}

}
  • 3 创建SqlSessionFactoryUtil工具类

/**@文件名: SqlSessionFactoryUtil.java
 * @类功能说明: SqlSessionFactory的工具类(主要用于获得SqlSession)
 * @作者: LiYuHui
 * @Email: aaa@qq.com
 * @日期: 2020年6月16日下午2:24:05
 * @修改说明:<br> 
 * <pre>
 * 	 <li>作者: LiYuHui</li> 
 * 	 <li>日期: 2020年6月16日下午2:24:05</li> 
 *	 <li>内容: </li>
 * </pre>
 */
public class SqlSessionFactoryUtil {
	private static SqlSessionFactory sqlSessionFactory;//单例工厂
	
	public static SqlSessionFactory getSqlSessionFactory() {
		if(sqlSessionFactory==null) {
			InputStream inputStream = null;
			try {
				inputStream = Resources.getResourceAsStream("mybatis-config.xml");
				sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return sqlSessionFactory;
	}
	
	public static SqlSession getSqlSession() {
		return getSqlSessionFactory().openSession();
	}
}
  • 4 创建mybatis-config.xml配置文件

	<!-- 引入配置文件 -->
	<properties resource="jdbc.properties"></properties>

	<!-- 设置别名 -->
	<typeAliases>
		<typeAlias type="com.lyh.model.UserInfo" alias="UserInfo"/>
	</typeAliases>
	
	<!-- 配置环境 -->
	<environments default="development">
		<!-- 开发环境  -->
		<environment id="development">
			<!-- 事务管理 -->
			<transactionManager type="JDBC"/>
			<!-- 数据源:用POOLED连接池 -->
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.jdbcDriver}"/>
				<property name="url" value="${jdbc.jdbcUrl}"/>
				<property name="username" value="${jdbc.userName}"/>
				<property name="password" value="${jdbc.password}"/>
			</dataSource>
		</environment>
	</environments>
	
	<!-- 映射器 -->
	<mappers>
		<mapper resource="com/lyh/mappers/UserInfoMapper.xml"/>
	</mappers>

创建(复制)log4j.properties和jdbc.properties

  • 5 创建接口

public interface UserInfoDao {
	/**
	 * @方法名: addUserInfo
	 * @方法说明: 添加用户信息
	 * @作者: LiYuHui
	 * @邮箱:aaa@qq.com
	 * @日期: 2020年6月16日下午2:45:19
	 * @param userInfo
	 * @return
	 * @return: int
	 */
	public int addUserInfo(UserInfo userInfo);
	
	/**
	 * @方法名: deleteUserInfo
	 * @方法说明: 删除用户信息
	 * @作者: LiYuHui
	 * @邮箱:aaa@qq.com
	 * @日期: 2020年6月16日下午2:46:28
	 * @param u_id
	 * @return
	 * @return: int
	 */
	public int deleteUserInfo(int u_id);
	
	/**
	 * @方法名: updateUserInfo
	 * @方法说明: 修改用户信息
	 * @作者: LiYuHui
	 * @邮箱:aaa@qq.com
	 * @日期: 2020年6月16日下午6:34:54
	 * @param userInfo
	 * @return
	 * @return: int
	 */
	public int updateUserInfo(UserInfo userInfo);
	
	/**
	 * @方法名: findAllUserInfo
	 * @方法说明: 查询所有用户信息
	 * @作者: LiYuHui
	 * @邮箱:aaa@qq.com
	 * @日期: 2020年6月16日下午6:51:15
	 * @return
	 * @return: List<UserInfo>
	 */
	public List<UserInfo> findAllUserInfo();
	
	/**
	 * @方法名: findUserInfoByName
	 * @方法说明: 根据用户名模糊查询
	 * @作者: LiYuHui
	 * @邮箱:aaa@qq.com
	 * @日期: 2020年6月16日下午7:09:52
	 * @param uName
	 * @return
	 * @return: List<UserInfo>
	 */
	public List<UserInfo> findUserInfoByName(Map<String,Object> map);
}
  • 6 创建mapper.xml配置文件实现接口

<!-- namespace的路径:和接口进行连接 -->
<mapper namespace="com.lyh.dao.UserInfoDao">
	<!-- 
		实体中属性名与表中字段名建立关系(当两者命名不一致时)
		type:实体名
		id:随便起,下面的resultMap使用
	 -->
	<resultMap type="UserInfo" id="user">
		<id property="uId" column="u_id"/>
		<result property="uName" column="u_name"/>
		<result property="uPwd" column="u_pwd"/>
		<result property="delflag" column="delflag"/>
	</resultMap>
	<!-- 
		添加用户信息
		id为接口中添加用户信息的方法名
		parameterType为参数类型
		由于设置了别名,所以可以直接用UserInfo,否则必须写全路径com.lyh.model.UserInfo
	 -->
	<insert id="addUserInfo"  parameterType="UserInfo">
		insert into t_userInfo(u_name,u_pwd,delflag) values(#{uName},#{uPwd},#{delflag})
	</insert>
	
	<!-- 
		删除用户信息
		id为接口中删除用户信息的方法名
		parameterType为参数类型
	 -->
	<delete id="deleteUserInfo" parameterType="int">
		delete from t_userInfo where u_id=#{uId}
	</delete>
	
	<!-- 修改用户信息 -->
	<update id="updateUserInfo" parameterType="UserInfo">
		update t_userInfo set u_name=#{uName},u_pwd=#{uPwd},delflag=#{delflag} where u_id=#{uId}
	</update>
	
	<!-- 
		查询所有用户信息
		当实体属性名与表中字段名不一致时,使用resultMap,其值与上面resultMap标签中id值一致
		当实体属性名与表中字段名一致时使用resultType,其值与Dao方法返回集合的泛型一致
	 -->
	<select id="findAllUserInfo" resultMap="user">
		select u_id,u_name,u_pwd,delflag from t_userInfo
	</select>
	
	<!-- 
		根据用户名模糊查询
		${}:1、取的是字符集,例如:小;2、不能防止sql注入
		#{}:1、取的是字符串,例如:'小';2、可以防止sql注入
	 -->
	<select id="findUserInfoByName" parameterType="Map" resultMap="user">
		select u_id,u_name,u_pwd,delflag from t_userInfo where u_name like concat('%',#{uName},'%')
	</select>
</mapper>
  • 7 使用JUnit单元测试

class UserInfoJUnitTest {

	private SqlSession sqlSession = null;
	private UserInfoDao userInfoDao = null;
	private Logger logger = null;
	
	@BeforeEach
	void setUp() throws Exception {
		//获取SqlSession
		sqlSession = SqlSessionFactoryUtil.getSqlSession();
		//利用反射机制获取UserInfoDao接口
		userInfoDao = sqlSession.getMapper(UserInfoDao.class);
		logger = Logger.getLogger(UserInfoJUnitTest.class);
	}

	@AfterEach
	void tearDown() throws Exception {
		//提交事务
		sqlSession.commit();
	}

	/**
	 * @方法名: addUserInfo
	 * @方法说明: 添加
	 * @作者: LiYuHui
	 * @邮箱:aaa@qq.com
	 * @日期: 2020年6月16日下午6:47:51
	 * @return: void
	 */
	@Test
	public void addUserInfo() {
		UserInfo userInfo = new UserInfo("白大","147852",0);
		int result = userInfoDao.addUserInfo(userInfo);
		if(result>0) {
			logger.info("添加成功!");
		}
	}

	/**
	 * @方法名: deleteUserInfo
	 * @方法说明: 删除
	 * @作者: LiYuHui
	 * @邮箱:aaa@qq.com
	 * @日期: 2020年6月16日下午6:48:02
	 * @return: void
	 */
	@Test
	public void deleteUserInfo() {
		int result = userInfoDao.deleteUserInfo(14);
		if(result>0) {
			logger.info("删除成功!");
		}
	}
	
	/**
	 * @方法名: updateUserInfo
	 * @方法说明: 修改
	 * @作者: LiYuHui
	 * @邮箱:aaa@qq.com
	 * @日期: 2020年6月16日下午6:48:11
	 * @return: void
	 */
	@Test
	public void updateUserInfo() {
		UserInfo userInfo = new UserInfo(13,"大黑","369852",0);
		int result = userInfoDao.updateUserInfo(userInfo);
		if(result>0) {
			logger.info("修改成功!");
		}
	}
	
	/**
	 * @方法名: findAllUserInfo
	 * @方法说明: 查询所有
	 * @作者: LiYuHui
	 * @邮箱:aaa@qq.com
	 * @日期: 2020年6月16日下午6:59:30
	 * @return: void
	 */
	@Test
	public void findAllUserInfo() {
		List<UserInfo> userList = userInfoDao.findAllUserInfo();
		for(int i=0;i<userList.size();i++) {
			System.out.println(userList.get(i));
		}
	}
	
	/**
	 * @方法名: findUserInfoByName
	 * @方法说明: 模糊查询
	 * @作者: LiYuHui
	 * @邮箱:aaa@qq.com
	 * @日期: 2020年6月17日上午9:21:15
	 * @return: void
	 */
	@Test
	public void findUserInfoByName() {
		Map<String,Object> map = new HashMap<String,Object>();
		//将要查询的数据存入map中
		map.put("uName", "小");
		List<UserInfo> userList =userInfoDao.findUserInfoByName(map);
		for(int i=0;i<userList.size();i++) {
			System.out.println(userList.get(i));
		}
		
	}
}