public interface UserDao {
//查询所有
public List findAll();
//dao接口中传递多个参数 使用@param
public User findOne(@Param("username")String username,@Param("realname")String realname);
//添加
public int insert(User user);
//修改
public int update(User user);
}
(2)创建映射文件
(3)测试
@Test
public void findAll()throws Exception{
//解析配置文件
Reader resource = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
//sqlsession封装了对数据库操作的各种方法
SqlSession sqlSession = factory.openSession();
//拿到接口的实现代理类对象
UserDao mapper = sqlSession.getMapper(UserDao.class);
List all = mapper.findAll();
System.out.println(all);
sqlSession.close();
}
@Test
public void findOne()throws Exception{
//解析配置文件
Reader resource = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
//sqlsession封装了对数据库操作的各种方法
SqlSession sqlSession = factory.openSession();
//拿到接口的实现代理类对象
UserDao mapper = sqlSession.getMapper(UserDao.class);
User user = mapper.findOne("aaa", "展示");
System.out.println(user);
sqlSession.close();
}
@Test
public void insert()throws Exception{
//解析配置文件
Reader resource = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
//sqlsession封装了对数据库操作的各种方法
SqlSession sqlSession = factory.openSession();
//拿到接口的实现代理类对象
UserDao mapper = sqlSession.getMapper(UserDao.class);
//添加给实体类设置属性
User user = new User();
user.setUsername("yyy");
user.setRealname("嘤嘤怪");
System.out.println("前"+user);
int row = mapper.insert(user);
System.out.println("后"+user);
//增删改没有提交数据库不改变
sqlSession.commit();
System.out.println(row);
sqlSession.close();
}
@Test
public void update()throws Exception{
//解析配置文件
Reader resource = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
//sqlsession封装了对数据库操作的各种方法
SqlSession sqlSession = factory.openSession();
//拿到接口的实现代理类对象
UserDao mapper = sqlSession.getMapper(UserDao.class);
User user = new User(35, "eee", "鹅鹅鹅");
int row = mapper.update(user);
sqlSession.commit();
sqlSession.close();
}
常见的bug
namespace和接口名不对应 xml文件没有注册到mybatis配置文件中
映射文件中的标签id和接口中方法名不对应
1.2安装mybatis插件
2传递多个参数
我们在idea接口中某些方法可能需要传递多个参数譬如登录
//dao接口中传递多个参数 使用@param为参数起名
public User findOne(@Param("username")String username,@Param("realname")String realname);
3添加时如何返回递增的主键值
需要返回添加数据库后的id值
insert into tb_user values(null,#{username},#{realname})
4解决列名和属性名不一致
问题查询是返回一个null 或者某列没有值
可以有两种解决办法
第一种:为查询的列起别名 而别名和属性名一致
select stuid id,stuname name,stuage age,stuaddress address from t_student
select * from t_student
5动态sql
5.1什么是动态sql
根据参数的值,判断sql的条件
name!=null
select * from 表名 where name=#{name} and address=#{address}