JavaWeb---Mybatis笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011583316/article/details/82316311

MyBatis笔记(二)


输入映射和输出映射

2.1parameterType(输入类型)
2.1.1传递简单类型
参考第一天内容
2.1.2传递pojo对象
参考第一天内容
Mybatis使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称。
2.1.3传递pojo包装对象
1. 新建包装pojo对象QueryVo
/**
* 包装pojo
* @author Steven
*/
public class QueryVo {

//用户对象
private User user;

public User getUser() {
    return user;
}

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

}

  1. 映射文件与sql



    SELECT * FROM USER WHERE username LIKE ‘%${user.username}%’

  2. 新增接口方法

  3. 增加测试方法,完成测试

2.2resultType(输出类型)
2.2.1输出简单类型


SELECT COUNT(1) FROM USER

其它步骤跟前面类似,添加接口方法与测试方法,完成测试。

2.2.2输出pojo对象
参考第一天内容

2.2.3输出pojo列表
参考第一天内容。

2.3输出resultMap
演示基于完成订单列表的查询,由user_id字段与pojo属性不一致时引出的resultMap。




    <!-- 使用result绑定普通字段 -->
    <result property="userId" column="user_id"/>
    <result property="number" column="number"/>
    <result property="createtime" column="createtime"/>
    <result property="note" column="note"/>
</resultMap>
<!-- 使用resultMap -->
<select id="getOrderListResultMap" resultMap="orderMap">
    SELECT * FROM `order`
</select>

其它步骤跟前面类似,添加接口方法与测试方法,完成测试。

动态sql

3.1If
演示基于完成用户列表查询功能,由多查询条件拼装引出if标签。




SELECT * FROM USER where 1 = 1


and id = #{id}


and username LIKE ‘%${username}%’

其它步骤跟前面类似,添加接口方法与测试方法,完成测试。

3.2Where
复制getUserByWhere修改一下,改名为getUserByWhere2。


关联查询

4.1一对一关联
4.1.1方法一,使用resultType
1. 新建OrderUser的pojo,继承自Order。
public class OrderUser extends Order {

private String username;
private String address;

…….get,set
}
2. 修改order的映射文件,新增查询方法getOrderUser。


SELECT
o.id,
o.user_id userId,
o.number,
o.createtime,
o.note,
u.username,
u.address
FROM order o
LEFT JOIN user u
ON u.id = o.user_id

其它步骤跟前面类似,添加接口方法与测试方法,完成测试。
4.1.2方法二,使用resultMap
1. 改造order的pojo

  1. 修改order的映射文件








    <!-- association:配置一对一关联
         property:绑定的用户属性
         javaType:属性数据类型,支持别名
    -->
    <association property="user" javaType="com.itheima.mybatis.pojo.User">
        <id property="id" column="user_id"/>
    
        <result property="username" column="username"/>
        <result property="address" column="address"/>
        <result property="sex" column="sex"/>
    </association>
    




    SELECT
    o.id,
    o.user_id,
    o.number,
    o.createtime,
    o.note,
    u.username,
    u.address,
    u.sex
    FROM order o
    LEFT JOIN user u
    ON u.id = o.user_id

其它步骤跟前面类似,添加接口方法与测试方法,完成测试。

4.2一对多关联
1. 改造user的pojo
这里写图片描述
2. 修改user的映射文件







    <!-- collection:配置一对多关系
         property:用户下的order属性
         ofType:property的数据类型,支持别名
    -->
    <collection property="orders" ofType="order">
        <!-- id标签用于绑定主键 -->
        <id property="id" column="oid"/>
        <!-- 使用result绑定普通字段 -->
        <result property="userId" column="id"/>
        <result property="number" column="number"/>
        <result property="createtime" column="createtime"/>
    </collection>

</resultMap>
<!-- 一对多关联查询 -->
<select id="getUserOrder" resultMap="user_order_map">
    SELECT
    u.`id`,
    u.`username`,
    u.`birthday`,
    u.`sex`,
    u.`address`,
    u.`uuid2`,
    o.`id` oid,
    o.`number`,
    o.`createtime`
    FROM `user` u
    LEFT JOIN `order` o
    ON o.`user_id` = u.`id`
</select>

其它步骤跟前面类似,添加接口方法与测试方法,完成测试。

Mybatis整合spring

5.1整合思路
1、SqlSessionFactory对象应该放到spring容器中作为单例存在。
2、传统dao的开发方式中,应该从spring容器中获得sqlsession对象。
3、Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象。
4、数据库的连接以及数据库连接池事务管理都交给spring容器来完成。

5.2整合步骤
1. 创建一个java工程。
2. 导入jar包。(课前资料中mybatis与spring整合所有包)
3. mybatis的配置文件sqlmapConfig.xml
4. 编写Spring的配置文件
1)数据库连接及连接池
2)sqlsessionFactory对象,配置到spring容器中
3)编写Spring的配置文件
5. 复制jdbc.properties配置文件到新工程
6. 复制log4j.properties配置文件到新工程

5.3Dao开发
5.3.1复制user的pojo到新工程
5.3.2传统Dao开发
1. 复制user.xml到新工程,并修改,只留下要测试的三个方法
2. 在SqlMapConfig.xml加载user.xml
3. 复制UserDao接口到新工程,并修改,只留下要测试的三个方法
4. 编写UserDaoImpl实现类,关键是继承SqlSessionDaoSupport
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {

@Override
public User getUserById(Integer id) {
    SqlSession sqlSession = super.getSqlSession();
    //查询用户
    User user = sqlSession.selectOne("user.getUserById", id);

    //不能关闭SqlSession
    //sqlSession.close();
    return user;
}

@Override
public List<User> getUserByUserName(String name) {
    SqlSession sqlSession = super.getSqlSession();
    List<User> list = sqlSession.selectList("user.getUserByName", name);
    //不能关闭SqlSession
    return list;
}

@Override
public void insertUser(User user) {
    SqlSession sqlSession = super.getSqlSession();
    sqlSession.insert("user.insertUser", user);
    //不用手动提交事务,交给spring
}

}
5. 在applicationContext.xml中配置UserDaoImpl实现类




6. 编写测试类,新建单完测试类
public class UserDaoTest {

private ApplicationContext applicationContext;

@Before
public void init(){
    applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
}

@Test
public void testGetUserById() {
    UserDao userDao = applicationContext.getBean(UserDao.class);
    User user = userDao.getUserById(10);
    System.out.println(user);
}

………省略其它方法
}

5.3.3Mapper代理模式开发Dao
1. 复制UserMapper.xml到新工程,并修改,只留下要测试的三个方法
2. 复制UserMapper接口到新工程,并修改,只留下要测试的三个方法
3. 配置Mapper
1)单个接口配置MapperFactoryBean








2)配置包扫描器





4. 测试

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);
}

Mybatis逆向工程

注意的点:在generatorConfig.xml中配置mapper生成的详细信息,注意改下几点:
1、添加要生成的数据库表
2、po文件所在包路径
3、mapper文件所在包路径

猜你喜欢

转载自blog.csdn.net/u011583316/article/details/82316311