一. 开发步骤:

1. 创建 PO (model) 类,根据需求创建。

2. 创建全局配置文件 sqlMapConfig.xml。

3. 编写映射文件。

4. 加载映射文件, 在 SqlMapConfig.xml 中进行加载。

5. 编写测试程序,连接并操纵数据库。
    - 读取配置文件。
    - 通过 SqlSessionFactoryBuilder 创建 SqlSessionFactory 会话工厂。
    - 通过 SqlSessionFactory 创建 SqlSession
    - 通过 SqlSession 的操作数据库方法。
    - 关闭 SqlSession。

二. 创建项目

代码获取

1. Dao创建

2. Dao创建并整合到 Spring

4. mapper创建并整合到 Spring

三. 参数信息

parameterType : 指定输入参数䣌 java 类型。
resultType    : 指定输出结果的 java 类型。

#{} : 相当于预处理中的占位符 -> ? ,可以接收 HashMap, POJO 类型参数,简单类型时参数可以是 value 或其它。(可防止 sql 注入)

${} : 相当于拼接 SQL 串,对传入的值不做任何解释,原样输出,可接受 HashMap, POJO 类型参数,接收简单类型参数时只能时 value。(有sql注入)

selectOne  : 只能查询 0 或 1 条记录,大于一条记录会报错。

selectList : 可以查询 0 或 n 条记录

四. mybatis 的 Dao 编写 【通过 mapper 代理方式实现】

1. 创建 接口类 (UserMapper)

package com.q.mybatis.mapper;

import com.q.mybatis.model.User;

public interface UserMapper {

    public int save(User user);

    public User getUserById(int id);

}

2. 创建 UserMapper.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">
<mapper namespace="com.q.mybatis.mapper.UserMapper"> <insert id="save" parameterType="user">
insert into user(username, sex, birthday, address)
values (#{username}, #{sex}, #{birthday}, #{address})
</insert> <!--
namespace : 接口映射地址
id : 方法名
parameterType : 方法参数类型 (如果是一个类,可直接放上类的路径, 可在 SqlMapConfig.xml 文件中设置别名)
resultType : 模型地址 ( 可以在 SqlMapConfig.xml 文件中设置别名 )
--> <select id="getUserById" parameterType="int" resultType="user">
select * from user where id = #{id}
</select> </mapper>

3. 加载映射文件

<!--  加载映射文件  -->
<mappers>
<mapper resource="com/q/mybatis/mapper/UserMapper.xml"></mapper>
</mappers>

4. 编写测试代码

import com.q.mybatis.mapper.UserMapper;
import com.q.mybatis.model.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import java.io.IOException;
import java.io.InputStream;
import java.util.Date; public class t4 { SqlSession session; @Before
public void before() throws IOException { System.out.println("insert Before"); // 1. 读取配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml"); // 2. 通过 SqlSessionFactoryBuilder 创建 SqlSessionFactory 会话工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); session = sessionFactory.openSession();
} @After
public void after(){
session.close();
} @Test
public void test1(){
UserMapper userMapper = session.getMapper(UserMapper.class); // 获取数据
System.out.println(userMapper.getUserById(16)); // 添加数据
User user1 = new User("t4_5","1",new Date(), "addr");
userMapper.save(user1);
session.commit();
} }

五. resultType / resultMap

1. resultType (表字段必须和类属性对应,如果不对应则返回 Null):
    模型地址 ( 可以在 SqlMapConfig.xml 文件中设置别名 )

<select id="getUserById" parameterType="int" resultType="com.q.mybatis.model.User">
select * from user where id = #{id}
</select>

2. resultMap: 当类属性字段和数据库字段不对应时,可以使用这个方法查询

<resultMap id="userResultMap" type="user">
<id property="id" column="id_"></id> <result property="username" column="username_"></result>
<result property="sex" column="sex_"></result>
<result property="birthday" column="birthday_"></result>
<result property="address" column="address_"></result>
</resultMap> <select id="getUserById" parameterType="int" resultMap="userResultMap">
select
id id_, username username_, sex sex_, birthday birthday_ , address address_
from user where id = #{id}
</select>

六. if where 使用

1. 配置文件 XML

<select id="findUserList" parameterType="com.q.mybatis.vo.UserQueryVO" resultType="user">

    select * from user
<where>
<if test="user.sex != null and user.sex != ''">
sex = #{user.sex}
</if> <if test="user.username != null and user.username != ''">
and username like '%${user.username}%'
</if> </where> </select>

2. 测试方法

@Test
public void test2(){
UserMapper userMapper = session.getMapper(UserMapper.class);
UserQueryVO query = new UserQueryVO(); User user = new User();
user.setSex("1"); query.setUser(user); List<User> users = userMapper.findUserList(query);
System.out.println(users);
}

七. 一对一

1. XML 配置

<!--  如果一个表中关联着其它表,就使用 resultMap  -->
<resultMap id="orderRslMap" type="orders">
<!-- 往 orders 的模型匹配数据 -->
<id column="id" property="id"/>
<id column="note" property="note"/>
<id column="number" property="number"/>
<id column="createtime" property="createtime"/> <!-- 往 orders 的关联表 user 匹配数据 -->
<!-- 注意: 这里使用 javaType -->
<association property="user" javaType="user">
<id column="user_id" property="id" />
<id column="username" property="username" />
<id column="address" property="address" />
</association> </resultMap> <select id="findOrderById" parameterType="int" resultType="orderRslMap">
select a.username, b.* from user a, orders b where a.id = b.id
</select>

2. 查询

orderMapper mapper = session.getMapper(OrderMapper.class);

Orders order = mapper.findOrderById(3);

System.out.println(order);
System.out.println(order.getUser());

八. 一对多

<resultMap id="orderRslMap" type="orders">
<!-- 往 orders 的模型匹配数据 -->
<id column="id" property="id"/>
<id column="note" property="note"/>
<id column="number" property="number"/>
<id column="createtime" property="createtime"/> <!-- 往 orders 的 orderdetail 匹配数据 一对多 -->
<!-- 注意:集合中的类型使用 ofType -->
<collection property="orderDetails" ofType="orderDetail">
<id column="detail_id" property="id"/>
<id column="item_id" property="itemsId"/>
<id column="item_num" property="itemsNum"/>
</collection> </resultMap>

九. 多对多 : 上面的 <collection> 中继续嵌套 <collection> ..文档。。。

十. 设置允许懒加载

<settings>
<setting name="lazyLoadingEnabled" value="true" />
</settings>

十一. 开启二级缓存

1. SqlMapCOnfig.xml 文件中

<settings>
<setting name="cacheEnabled" value="true" />
</settings>

2. UserMapper.xml 文件中

// type 默认不写用的是 mybatis 自带的缓存( perpetualCache )

<cache></cache>

3. 注意:当 session 关闭后,才会提交到 二级缓存 : session.close();
        当执行 update, delete, save 等操作时会清空缓存。

最新文章

  1. Linux解决乱码问题
  2. 项目开发之UML之初识
  3. PHP面向对象之魔术方法复习
  4. win 7 普通家庭版 装IIS
  5. iphone dev 入门实例7:How to Add Splash Screen in Your iOS App
  6. Java项目经验——程序员成长的关键(转载)
  7. jQuery过滤选择器:not()方法使用介绍
  8. 图模型的统计推断 inference in graphical models(马尔科夫链的推断)
  9. jquery自动生成分页控件 - pagetest.js
  10. Dungeon Master poj 2251 dfs
  11. Product Management vs. Product Marketing
  12. HDU D Tree [点分治]
  13. 通过 Emoji 表情标识 Git 每次提交的信息
  14. Spring从认识到细化了解
  15. PS 制作彩色烟雾
  16. afinalDb 用法
  17. shell下的几个命令
  18. jar包在控制台下运行
  19. linux mysql 卸载与安装及配置命令
  20. 100 Most Popular Machine Learning Video Talks

热门文章

  1. java lambda怎么表达式判断被调用接口名称和接口中方法
  2. Spring Cloud Zuul路由规则动态更新
  3. Ubuntu 18.04 Server 配置静态ip
  4. Jupyter交互式工具安装使用
  5. 3:基于乐观锁(两种)控制并发: version、external锁
  6. Libev库学习
  7. Linux下Java变量
  8. 关于素数表-C++
  9. element-ui 穿梭框使用axios数据查询
  10. Fortify漏洞之Dynamic Code Evaluation: Code Injection(动态脚本注入)和 Password Management: Hardcoded Password(密码硬编码)