- 一 parameterType(输入类型)
- 二、 数据库元素名称与配置文件的标签名称不一致
- 三、动态sql语句
- 1.if标签
- 2.where标签
- fore 标签
- 四、关联查询
- 1.一对一查询
- 1.创建查询语句映射表
- 2.resultmap
- 2.一对多查询
- 五、mybatis整合spring
- 1.整合步骤
- 1.
- 2.传统dao
- 3.mapper代理模式开发dao
一 parameterType(输入类型)
1.传递简单类型
2.传递pojo对象,Mybatis使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称。
3.包装的pojo:对象里面还有对象
3.1代码实现
public class QueryVo {
//包装user 包装的pojp
// 对象里面还有对象
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
SELECT * FROM `user`
WHERe username LIKE '%${user.username}%'
List getUserByQueryVo(QueryVo vo);
@Test
public void testGetUserByQueryVo() {
SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession(true);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
QueryVo vo = new QueryVo();
User user2 = new User();
user2.setUsername("张");
vo.setUser(user2);
List list = mapper.getUserByQueryVo(vo);
for (User user : list) {
}
sqlSession.close();
}
二、 数据库元素名称与配置文件的标签名称不一致
使用resultMap标签
下面的别名配置单表查询时只需配置别名不一样的元素即可
多表查询时需要全部配置
三、动态sql语句 1.if标签
2.where标签 fore 标签
需要一个集合,在包装类中定义一个list集合 ,并且创建set,get方法
foreach循环标签
~~删除线格式~~ collection:要遍历的集合,来源入参
open:循环开始前的sql
item:设置循环变量
separator:分隔符
close:循环结束拼接的sql
#{uid}:占位符的方式来输出uId
public void testGetUserByIds() {
SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
QueryVo vo = new QueryVo();
vo.setIds(Arrays.asList(22,26,28,31));
List list = userMapper.getUserByIds(vo);
for (User user : list) {
System.out.println(user);
}
sqlSession.close();
}
四、关联查询
1.一对一查询
1.创建查询语句映射表
类似于pojo的传参方式
2.resultmap1.在order表中添加,目的是连表查询的时候进行输出用户表信息
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
2.配置resultmap
记住id
3.配置数据库查询语句
4.进行Junit测试
2.一对多查询collection用于配置一对多关联查询
property:User里面的order属性
ofType:Order的数据类型,即使order.java文件 ,支持别名
1.因为是一对多的原因,所以在user表中返回的是order集合
*/ private Listorders; public List getOrder() { return orders; } public void setOrder(List order) { this.orders = order; }
2.配置resultmap
3.配置数据库查询语句
4.测试
在进行遍历时要进行双重遍历
首先遍历user表
再在user表中进行fore循环
for(Order order : user.getOrder){
·· 此时还需判断 order.id是否为空值
}
- 创建一个java工程。
- 导入jar包。(课前资料中mybatis与spring整合所有包)
- mybatis的配置文件sqlmapConfig.xml
- 编写Spring的配置文件
(1)数据库连接及连接池
(2)sqlsessionFactory对象,配置到spring容器中
(3) 编写Spring的配置文件 - 复制jdbc.properties配置文件到新工程
- 复制log4j.properties配置文件到新工程
2.传统dao
1. 复制user.xml到新工程,并修改,只留下要测试的三个方法 2. 在SqlMapConfig.xml加载user.xml 3. 复制UserDao接口到新工程,并修改,只留下要测试的三个方法 4. 编写UserDaoImpl实现类,关键是继承SqlSessionDaoSupport 5.3.mapper代理模式开发dao
- 复制UserMapper.xml到新工程,并修改,只留下要测试的三个方法
- 复制UserMapper接口到新工程,并修改,只留下要测试的三个方法
- 配置Mapper
- 单个接口配置MapperFactoryBean
- 配置包扫描器
- 测试
public class UserMapperTest {
private ApplicationContext applicationContext;
@Before
public void init(){
applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
}
@Test
public void testGetUserById() {
UserMapper userMapper = applicationContext.getBean(UserMapper.class);
User user = userMapper.getUserById(10);
System.out.println(user);
}



