Mybatis(8)DAO实现类的使用方式
程序员文章站
2022-06-14 11:18:13
...
新建项目,复制Mybatis的day02_eesy_01mybatisCRUD
1.更改一,删掉QueryVo类,domain(包)下
2.IUserDao接口,删掉findUserByVo方法
3.IUserDao.xml映射文件更改和User实体类属性更改
删掉resultMap相关,并复原实体类和数据表列对应名称
<?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.itheima.dao.IUserDao">
<select id="findAll" resultType="com.itheima.domain.User">
select * from user;
</select>
<insert id="saveUser" parameterType="com.itheima.domain.User">
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address});
</insert>
<!--更新用户-->
<update id="updateUser" parameterType="com.itheima.domain.User">
update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id};
</update>
<!--删除用户-->
<delete id="deleteUser" parameterType="INT">
delete from user where id=#{userID};
</delete>
<!--根据id查询用户-->
<select id="findById" parameterType="INT" resultType="com.itheima.domain.User">
select * from user where id=#{userId};
</select>
<!--根据名称模糊查询-->
<select id="findByName" parameterType="string" resultType="com.itheima.domain.User">
select * from user where username like #{username};
</select>
<!--获取用户总记录条数-->
<select id="findTotal" resultType="INT">
SELECT COUNT(id) from user;
</select>
</mapper>
自定义Dao实现类,findAll方法
1.创建UserDaoImpl实现类,实现IUserDao接口
dao(包)->impl(包)->UserDaoImpl实现类,
public class UserDaoImpl implements IUserDao {
private SqlSessionFactory factory;
public UserDaoImpl(SqlSessionFactory factory){
this.factory=factory;
}
public List<User> findAll() {
//1.根据factory获取SqlSession对象
SqlSession session=factory.openSession();
//2.掉用SqlSession方法,实现列表查询
//参数就是能获取配置信息的key,namespace+方法名(id),自定义实现类替代了代理对象自己掉用selectList方法
List<User> users=session.selectList("com.itheima.dao.IUserDao.findAll");
//3.释放资源
session.close();
return users;
}
}
2.更改MybatisTest测试类
package com.itheima.test;
import com.itheima.dao.IUserDao;
import com.itheima.dao.Impl.UserDaoImpl;
import com.itheima.domain.User;
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.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
public class MybatisTest {
private InputStream in;
private IUserDao userDao;
//为了避免重复操作,将每次的初始化放到一个方法中
@Before//用于在测试方法执行之前执行
public void init() throws IOException {
//1.读取配置文件
in= Resources.getResourceAsStream("SqlMapConfig.xml");
//2.获取SqlSessionFactory对象
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
//3.使用工厂对象,创建dao对象
userDao=new UserDaoImpl(factory);
}
//释放资源,放到一个方法中
@After//测试方法执行之后执行
public void destroy() throws IOException {
//6.释放资源
in.close();
}
@Test
public void testFindAll() throws IOException {
//5.执行方法
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
}
}
3.测试findAll方法
实现保存操作
1.UserDaoImpl实现类
public void saveUser(User user) {
//1.根据factory获取SqlSession对象
SqlSession session=factory.openSession();
//2.掉用SqlSession方法,实现保存
//参数就是能获取配置信息的key,namespace+方法名(id)
//第一个参数表示用哪个语句执行,第二个语句需要的参数
session.insert("com.itheima.dao.IUserDao.saveUser",user);
//3.提交事务
session.commit();
//4.释放资源
session.close();
}
2.MybatisTest类
//测试保存操作
@Test
public void testSave(){
User user=new User();
user.setUsername("dao impl user");
user.setAddress("北京市顺义区");
user.setSex("男");
user.setBirthday(new Date());
//执行保存方法
System.out.println("保存操作之前"+user);
userDao.saveUser(user);
System.out.println("保存操作之后"+user);
}
3.执行结果
更新操作
1.IUserDaoImpl
public void updateUser(User user) {
//1.根据factory获取SqlSession对象
SqlSession session=factory.openSession();
//2.掉用SqlSession方法,实现更新
//参数就是能获取配置信息的key,namespace+方法名(id)
//第一个参数表示用哪个语句执行,第二个语句需要的参数
session.update("com.itheima.dao.IUserDao.updateUser",user);
//3.提交事务
session.commit();
//4.释放资源
session.close();
}
2.MybatisTest测试类
//测试更新操作
@Test
public void testUpdate(){
User user=new User();
user.setId(50);
user.setUsername("userDaoImpl updateuser");
user.setAddress("北京市顺义区");
user.setSex("女");
user.setBirthday(new Date());
//执行更新方法
userDao.updateUser(user);
}
3.执行结果
删除操作
1.UserDaoImpl
public void deleteUser(Integer userId) {
//1.根据factory获取SqlSession对象
SqlSession session=factory.openSession();
//2.掉用SqlSession方法,实现删除数据
//参数就是能获取配置信息的key,namespace+方法名(id)
//第一个参数表示用哪个语句执行,第二个语句需要的参数
session.delete("com.itheima.dao.IUserDao.deleteUser",userId);
//3.提交事务
session.commit();
//4.释放资源
session.close();
}
2.MybatisTest
//测试删除操作
@Test
public void testDelete(){
//执行删除方法
userDao.deleteUser(50);
}
3.测试结果
查询一条,模糊查询,总记录数
1.UserDaoImpl实现类
public User findById(Integer userId) {
//1.根据factory获取SqlSession对象
SqlSession session=factory.openSession();
//2.掉用SqlSession方法,实现查询一条数据
//参数就是能获取配置信息的key,namespace+方法名(id)
User user=session.selectOne("com.itheima.dao.IUserDao.findById",userId);
//3.释放资源
session.close();
return user;
}
public List<User> findByName(String username) {
//1.根据factory获取SqlSession对象
SqlSession session=factory.openSession();
//2.掉用SqlSession方法,实现查询一条数据
//参数就是能获取配置信息的key,namespace+方法名(id)
List<User> users=session.selectList("com.itheima.dao.IUserDao.findByName",username);
//3.释放资源
session.close();
return users;
}
public int findTotal() {
//1.根据factory获取SqlSession对象
SqlSession session=factory.openSession();
//2.掉用SqlSession方法,实现查询一条数据
//参数就是能获取配置信息的key,namespace+方法名(id)
Integer count=session.selectOne("com.itheima.dao.IUserDao.findTotal");
//3.释放资源
session.close();
return count;
}
2.MybatisTest类
//测试查询一个操作
@Test
public void testFindOne(){
//执行查询一个方法
User user=userDao.findById(48);
System.out.println(user);
}
//测试模糊查询操作
@Test
public void testFindByName(){
//执行查询一个方法,在此处提供%进行模糊查询,因为映射文件中未提供
List<User> users=userDao.findByName("%王%");
//映射文件中提供%,则此处不写%,两种模糊查询的方法
//List<User> users=userDao.findByName("王");
for (User user:users){
System.out.println(user);
}
}
//测试查询总记录数操作
@Test
public void testFindTotal(){
//执行查询总记录方法
int count=userDao.findTotal();
System.out.println(count);
}
3.测试结果
上一篇: TCP三次握手和四次挥手详解
下一篇: RecyclerView基本用法一
推荐阅读
-
Mybatis 映射器接口实现类的方式 运行过程debug分析
-
MyBatis 关联查询的实现:使用扩展类、嵌套查询实现一对一(了解)
-
Mybatis(8)DAO实现类的使用方式
-
Mybatis(3)-编写dao实现类的方式
-
Mybatis(一),使用三种方式实现对数据库表的增删改查
-
Java语言mysql数据库的访问步骤,一个简单的实例——使用DAO(数据库操作类 Data Access Object ) 实现对mysql数据库的增删改查
-
Mybatis 映射器接口实现类的方式 运行过程debug分析
-
MyBatis——dao代理的使用、深入理解参数(传递一个参数、传递多个参数、使用entity实体类传递、使用自定义类传递、按位置传递、使用Map传递)
-
mybatis功能之spring自动代理完成dao的实现类功能
-
MyBatis 关联查询的实现:使用扩展类、嵌套查询实现一对一(了解)