全称
Object Graphic Navigation Language
作用
通过对象的取值方法获取数据,
写法上忽略get方法
栗子
正常:
user.getUsername()
OGNL:
user.username()
mybatis中直接使用username不用写user.
因为在parameterType中提供了属性所属的类,
所有不用写对象名
传递包装对象
在实际开发中,
传入的参数可能是不同对象的属性值。
这时可以使用包装对象传递输入参数。
入门
创建实体QueryVo类
/**
*@ClassName QueryVo
*@Description TODO
*@Author Yin.Liu8
*@Date 2021/3/1 22:22
*@Version 1.0
*/
public class QueryVo {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String toString() {
return "QueryVo{" +
"user=" + user.toString() +
'}';
}
}
DAO
/**
* Description:用户的持久层接口
* <p>
* ClassName: IUserDAO
* date: 2021/3/1 10:47
*
* @author Yin.Liu
* @version 1.0
* @since JDK 1.8
*/
public interface IUserDAO {
/**
* 根据qureyVo中的条件查询用户
* @param vo
* @return
*/
User findUserByVo(QueryVo vo);
}
mapper.xml
<?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">
<!--namespace必须是dao接口的全限定类名-->
<mapper namespace="xyz.zhouzhousag.dao.IUserDAO">
<!--根据qureyVo中的条件查询用户-->
<select id="findUserByVo" parameterType="xyz.zhouzhousag.domain.QueryVo" resultType="xyz.zhouzhousag.domain.User">
select * from user where username = #{user.username}
</select>
</mapper>
测试类
/**
*@ClassName MybatisTest
*@Description TODO
*@Author Yin.Liu8
*@Date 2021/3/1 11:25
*@Version 1.0
*/
public class MybatisTest {
private InputStream in;
private SqlSession sqlSession;
private IUserDAO userDAO;
@Before //用于测试方法之前使用
public void init() throws Exception {
//1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3.使用工厂生产 SqlSession对象
sqlSession = factory.openSession();
//4.使用SqlSession创建DAO接口的代理对象
userDAO = sqlSession.getMapper(IUserDAO.class);
}
@After //用于测试方法之后
public void destroy() throws Exception {
//提交事务
sqlSession.commit();
//6.释放资源
sqlSession.close();
in.close();
}
@Test
public void mybatisTest7(){
QueryVo queryVo = new QueryVo();
User user = new User();
user.setUsername("传智播客");
queryVo.setUser(user);
User userByVo = userDAO.findUserByVo(queryVo);
System.out.println(userByVo.toString());
}
}