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

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

  • 1 导入相关jar包

如图所示
在这里插入图片描述

  • 2 创建实体类

/**@文件名: UserInfo.java
 * @类功能说明: 用户的实体
 * @作者: LiYuHui
 * @Email: 1327711913@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: 1327711913@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
	 * @邮箱:1327711913@qq.com
	 * @日期: 2020年6月16日下午2:45:19
	 * @param userInfo
	 * @return
	 * @return: int
	 */
	public int addUserInfo(UserInfo userInfo);
	
	/**
	 * @方法名: deleteUserInfo
	 * @方法说明: 删除用户信息
	 * @作者: LiYuHui
	 * @邮箱:1327711913@qq.com
	 * @日期: 2020年6月16日下午2:46:28
	 * @param u_id
	 * @return
	 * @return: int
	 */
	public int deleteUserInfo(int u_id);
	
	/**
	 * @方法名: updateUserInfo
	 * @方法说明: 修改用户信息
	 * @作者: LiYuHui
	 * @邮箱:1327711913@qq.com
	 * @日期: 2020年6月16日下午6:34:54
	 * @param userInfo
	 * @return
	 * @return: int
	 */
	public int updateUserInfo(UserInfo userInfo);
	
	/**
	 * @方法名: findAllUserInfo
	 * @方法说明: 查询所有用户信息
	 * @作者: LiYuHui
	 * @邮箱:1327711913@qq.com
	 * @日期: 2020年6月16日下午6:51:15
	 * @return
	 * @return: List<UserInfo>
	 */
	public List<UserInfo> findAllUserInfo();
	
	/**
	 * @方法名: findUserInfoByName
	 * @方法说明: 根据用户名模糊查询
	 * @作者: LiYuHui
	 * @邮箱:1327711913@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
	 * @邮箱:1327711913@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
	 * @邮箱:1327711913@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
	 * @邮箱:1327711913@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
	 * @邮箱:1327711913@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
	 * @邮箱:1327711913@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));
		}
		
	}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值