Mybatis 2

原创 2017年11月15日 07:36:19

1、输入映射和输出映射
a) 输入参数映射
b) 返回值映射
2、动态sql :动态拼接SQL语句
a) If标签
b) Where标签
c) Sql片段
d) Foreach标签
3、关联映射
a) 一对一关联
b) 一对多关联
4、Mybatis整合spring
a) 如何整合spring
b) 使用原始的方式开发dao
c) 使用Mapper接口动态代理
5、Mybatis逆向工程(代码生成工具 了解)
2. 输入映射和输出映射
Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心。
2.1. 环境准备
2.2. parameterType(输入类型)
2.2.1. 传递简单类型
参考第一天内容。
使用#{}占位符,或者{}进行sql拼接。  
2.2.2. 传递pojo对象  
参考第一天的内容。  
Mybatis使用ognl表达式解析对象字段的值,#{}或者
{}括号中的值为pojo属性名称。

2.2.3. 传递pojo包装对象
开发中通过可以使用pojo传递查询条件。
查询条件可能是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如查询用户信息的时候,将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。
包装对象:Pojo类中的一个属性是另外一个pojo。

需求:根据用户名模糊查询用户信息,查询条件放到QueryVo的user属性中。

2.2.3.1. 编写QueryVo

public class QueryVo {
    // 包含其他的pojo
    private User user;

    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
}

2.2.3.2. Sql语句

SELECT * FROM user WHERE username LIKE '%张%'

2.2.3.3. Mapper.xml文件
在UserMapper.xml中配置sql,如下图。

2.2.3.4. Mapper接口
在UserMapper接口中添加方法,如下图:

2.2.3.5. 测试方法
在UserMapeprTest增加测试方法,如下:

@Test
public void testQueryUserByQueryVo() {
    // mybatis和spring整合,整合之后,交给spring管理
    SqlSession sqlSession = this.sqlSessionFactory.openSession();
    // 创建Mapper接口的动态代理对象,整合之后,交给spring管理
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

    // 使用userMapper执行查询,使用包装对象
    QueryVo queryVo = new QueryVo();
    // 设置user条件
    User user = new User();
    user.setUsername("张");
    // 设置到包装对象中
    queryVo.setUser(user);

    // 执行查询
    List<User> list = userMapper.queryUserByQueryVo(queryVo);
    for (User u : list) {
        System.out.println(u);
    }

    // mybatis和spring整合,整合之后,交给spring管理
    sqlSession.close();
}

2.2.3.6. 效果
测试结果如下图:

2.3. resultType(输出类型)
2.3.1. 输出简单类型
需求:查询用户表数据条数

sql:SELECT count(*) FROM user

2.3.1.1. Mapper.xml文件
在UserMapper.xml中配置sql,如下图:

2.3.1.2. Mapper接口
在UserMapper添加方法,如下图:

2.3.1.3. 测试方法
在UserMapeprTest增加测试方法,如下:
@Test
public void testQueryUserCount() {
// mybatis和spring整合,整合之后,交给spring管理
SqlSession sqlSession = this.sqlSessionFactory.openSession();
// 创建Mapper接口的动态代理对象,整合之后,交给spring管理
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

// 使用userMapper执行查询用户数据条数
int count = userMapper.queryUserCount();
System.out.println(count);

// mybatis和spring整合,整合之后,交给spring管理
sqlSession.close();

}

2.3.1.4. 效果
测试结果如下图:

注意:输出简单类型必须查询出来的结果集有一条记录,最终将第一个字段的值转换为输出类型。

2.3.2. 输出pojo对象
参考第一天内容
2.3.3. 输出pojo列表
参考第一天内容。
2.4. resultMap
resultType可以指定将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。
如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。
resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。

需求:查询订单表order的所有数据
sql:SELECT id, user_id, number, createtime, note FROM orders
2.4.1. 声明pojo对象
数据库表如下图:

Order对象:
public class Order {
// 订单id
private Integer id;
// 用户id
private Integer userId;
// 订单号
private String number;
// 订单创建时间
private Date createtime;
// 备注
private String note;
get/set。。。
}
2.4.2. Mapper.xml文件
创建OrderMapper.xml配置文件,如下:

Global logging configuration

log4j.rootLogger=DEBUG, stdout

Console output…

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
5.3.3.5. 效果:
加入的配置文件最终效果如下:

5.4. Dao的开发
两种dao的实现方式:
1、原始dao的开发方式
2、使用Mapper代理形式开发方式
a) 直接配置Mapper代理
b) 使用扫描包配置Mapper代理

需求:
1. 实现根据用户id查询
2. 实现根据用户名模糊查询
3. 添加用户

5.4.1. 创建pojo
public class User {
private int id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址

get/set。。。
}

5.4.2. 传统dao的开发方式
原始的DAO开发接口+实现类来完成。
需要dao实现类需要继承SqlsessionDaoSupport类

5.4.2.1. 实现Mapper.xml
编写User.xml配置文件,如下:

<!-- Mapper代理的方式开发方式二,扫描包方式配置代理 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!-- 配置Mapper接口 -->
    <property name="basePackage" value="cn.itcast.mybatis.mapper" />
</bean>

每个mapper代理对象的id就是类名,首字母小写

mybatis实现两张表的连接查询(一对多)

mybatis实现两张表的连接查询(一对多)
  • qq_37288235
  • qq_37288235
  • 2017年08月10日 19:26
  • 500

Mybatis实战教程之二调用接口方式

前面我们已经完成了mybatis,myeclipse.mysql环境的搭建,并对其进行了数据查询测试。但是那是测试时用的方法其实并不好。现在我们来回顾下当时用来测试的方法。用框起来的那句就是之前的测试...
  • u012743333
  • u012743333
  • 2015年01月09日 10:38
  • 1617

SpringBoot + Mybatis 的 insert 通过注解传入多个参数

直接上代码,希望对大家有帮助 @Insert("insert into a_manu_model(manu_code,model_code) values(#{manuCode},#{modelCo...
  • nimoyaoww
  • nimoyaoww
  • 2018年01月10日 21:24
  • 123

mybatis中association的column传入多个参数值

顾名思义,association是联合查询。 在使用association中一定要注意几个问题。文笔不好,白话文描述一下。 1: fncg_PD_QRY_MANAGE 是...
  • yiluoAK_47
  • yiluoAK_47
  • 2014年10月10日 16:59
  • 10901

#二.mybatis-helloworld

1.导入jar包      asm-3.3.1.jar     c3p0-0.9.1.2.jar     cglib-2.2.2.jar     commons-logging-1.1....
  • yuexianchang
  • yuexianchang
  • 2017年05月23日 22:53
  • 263

【MyBatis】2:MyBatis简介

MyBatis是什么?         MyBatis原本是Apache的一个开源项目iBatis,2010年这个项目由ApacheSoftware Foundation迁移到了Google Cod...
  • u010929604
  • u010929604
  • 2016年07月29日 21:33
  • 635

Mybatis中SqlMapper配置的扩展与应用(3)

隔了两周,首先回顾一下,在Mybatis中的SqlMapper配置文件中引入的几个扩展机制: 1.引入SQL配置函数,简化配置、屏蔽DB底层差异性 2.引入自定义命名空间,允许自定义语句级元素...
  • csao204282
  • csao204282
  • 2017年01月05日 15:44
  • 929

Mybatis 1.动态sql 2.模糊查询

MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑。 MyBatis中用于实现动态SQL的元素主要有:   ifchoose(when,otherw...
  • honghu_00
  • honghu_00
  • 2015年09月20日 09:54
  • 885

mybatis查询出来的时间少两天

出现mybatis查询出来的时间少两天的情况是由于数据库的设计有问题,将数据库里面的date字段都改为datatime就可以了。 注意:在设计数据库设计有时间字段的时候尽量少用date,尽量...
  • qq_36125733
  • qq_36125733
  • 2017年05月31日 19:47
  • 331

mybatis关联查询--自连接 传参

http://xpenxpen.iteye.com/blog/2124198   默认及时加载,无论是否用sql引用写结果集,但是延时加载的前提的用sql写结果集   http://blog....
  • y666666y
  • y666666y
  • 2017年04月17日 15:39
  • 1126
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mybatis 2
举报原因:
原因补充:

(最多只允许输入30个字)