在dao层自定义方法 然后调用自己写的方法完成所有操作
1.1实现过程(1)在dao层创建接口
public interface UserDao {
public List findAll();
public int addUser(User user);
public User findByNameAndRealName(@Param("username")String username,
@Param("realname")String realname);
public User findById(int id);
public int deleteUser(int id);
public int update(User user);
}
(2)修改之前的映射文件 (UserMapper.xml)
insert into tb_user values(null,#{username},#{realname})
注意:UserMapper.xml中的namespace必须和创建的接口目录一致,id与方法名一一对应 如图所示
!](https://img-blog.csdnimg.cn/7580bc0834e5480f807ac2a65b7c0726.png)
(3)测试
//测试通过id查询用户
@Test
public void testSelect() throws Exception{
Reader rd = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(rd);
SqlSession session = factory.openSession();
UserDao userDao = session.getMapper(UserDao.class);
User user = userDao.findById(5);
System.out.println(user);
session.commit();
session.close();
}
//测试添加用户
@Test
public void testAdd() throws Exception{
Reader rd = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory factoy = new SqlSessionFactoryBuilder().build(rd);
SqlSession session = factoy.openSession();
User user = new User();
user.setUsername("xd");
user.setRealname("学都");
UserDao userdao = session.getMapper(UserDao.class);
int row = userdao.addUser(user);
System.out.println(user);
session.commit();
session.close();
}
//删除用户测试
@Test
public void testDel() throws Exception{
Reader rd = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(rd);
SqlSession session = factory.openSession();
UserDao userdao = session.getMapper(UserDao.class);
int row = userdao.deleteUser(5);
System.out.println(row);
session.commit();
session.close();
}
//测试修改
@Test
public void testUpdate() throws Exception{
Reader rd = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(rd);
SqlSession session = factory.openSession();
User user = new User(20, "wc", "午吃");
UserDao userdao = session.getMapper(UserDao.class);
int row = userdao.update(user);
System.out.println(row);
session.commit();
session.close();
}
//测试查询全部
@Test
public void testQueryAll() throws Exception{
Reader rd = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(rd);
SqlSession session = factory.openSession();
UserDao userdao = session.getMapper(UserDao.class);
List user = userdao.findAll();
System.out.println(user);
session.close();
}
2 安装mybatis插件
作用: 检查dao和映射文件是否匹配
箭头可直接跳到与UserMapper.xml 迅速检查自己的sql代码
实例:通过姓名和真实姓名查找用户
(1)在dao层中Java代码为
public User findByNameAndRealName(@Param("username")String username,
@Param("realname")String realname);
(2)在UserMapper.xml中代码为
select * from tb_user where username=#{username} and realname=#{realname}
解释:在参数处使用@Param()为参数起名即可
之前的代码添加一条记录后,在控制台输出后发现id为0 所以为了解决这个问题只需要在映射文件中添加 useGeneratedKeys=“true” keyProperty="userid"即可
insert into tb_user values(null,#{username},#{realname})
5.解决数据库字段名字和实体层名字不一致问题
数据库字段如下:
实体层;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private int id;
private String stuName;
private int stuAge;
private String stuSex;
}
可发现数据库字段与实体层属性不一致
解决方法有两种:
(1) 为查询的列起别名,而别名和属性名一致
(2)使用resultMap完成列和属性之间的映射关系。(推荐)
select * from tb_stu where stu_id=#{id}



