Mybatis对数据库表数据进行CRUD操作
程序员文章站
2022-05-02 20:28:28
...
Mybatis对数据库表数据进行CRUD操作
如图所示
/**@文件名: 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 + "]";
}
}
/**@文件名: 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();
}
}
<!-- 引入配置文件 -->
<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
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);
}
<!-- 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>
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));
}
}
}
推荐阅读
-
C++如何利用API对Mysql数据库进行增删改操作?
-
Java对MySQL数据库进行连接、查询和修改操作方法
-
数据库(SQL Server )经典例题(二):对S表、P表、J表、SPJ表的操作——单表查询
-
利用Python进行postgres、mysql数据库基本操作(建表、插入数据、删除数据、添加字段注释)
-
JAVA对MYSQL数据库进行批量操作,addBatch(),executeBatch()方法
-
数据库(SQL Server )经典例题(三):对S表、P表、J表、SPJ表的操作——多表查询
-
使用IDEA对Oracle数据库进行简单增删改查操作
-
PHP对MYSQL数据库进行修改删除数据、php修改 php删除操作讲解
-
使用Mybatis对数据库进行单表操作的实现示例
-
使用imp和exp命令对Oracle数据库进行导入导出操作详解