Mybatis框架学习(二)

入输出映射

parammeterType(输入类型)

简单类型

       使用#{}占位符,或者${}进行sql拼接

传递pojo对象

       Mybatis使用ognl表达式对象字段值,#{}或者${}括号中为pojo对象属性名称

传递pojo包装对象

       开发中可以使用pojo传递查询对象

       查询条件可能是综合查询条件,不仅包括用户查询条件还包括其他查询条件

       编写QueryVo

/**
 * 包装的pojo
 * @author jzhang
 *
 */
public class QueryVo{
   private User user;

   public User getUser() {
      return user;
   }

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

       sql配置

 

<select id="getUserByQueryVo" parameterType="queryvo" resultType="user">
    SELECT
    `id`,
    `username`,
    `birthday`,
    `sex`,
    `address`
    FROM `user`
    WHERE `username` LIKE '%${user.username}%'
</select>

       UserMapper接口添加List<User> getUserByQueryVo(QueryVo vo)方法

      编写测试代码

@Test
public void testGetUserByQueryVo(){
    SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtil.getSqlSessionFactory();
    SqlSession sqlSession = sqlSessionFactory.openSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    QueryVo vo = new QueryVo();
    User user = new User();
    user.setUsername("张");
    vo.setUser(user);
    List<User> list = userMapper.getUserByQueryVo(vo);
    for (User u : list) {
        System.out.println(u);
    }
}

resultType(输出类型) 

输出简单类型

       sql配置

<select id="getUserCount" resultType="int">
   SELECT COUNT(1) FROM `user`
</select>

       UserMapper接口添加Integer getUserCount()方法 

       编写测试代码

@Test
public void testGetUserCount() {
    SqlSession sqlSession = SqlSessionFactoryUtil.getSqlSessionFactory().openSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

    int count = userMapper.getUserCount();
    System.out.println("用户总记录数:"+count);

    sqlSession.close();
}

输出pojo对象

输出pojo列表

<!-- resultType:结果返回为列表集合 只需设置为元素设置类型 --> 

 resultMap

       resultType可以指定将查询结果映射为pojo,但需要pojo属性名和sql查询的列名一致才能成功

   Order类

        order表

       其中表中的列user_id与pojo中userId属性名称不一致

       sql配置

  

<?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:命名空间 可以隔离sql语句 -->
<mapper namespace="cn.zjut.mybatis.mapper.OrderMapper">
   <select id="getOrderList" resultType="order">
      SELECT
         `id`,
         `user_id`,
         `number`,
         `createtime`,
         `note`
      FROM `order`
   </select>
</mapper>

       OrderMapper接口添加List<Order> getOrderList()方法

       编写测试代码

@Test
public void testGetOrderList() {
   SqlSession sqlSession = SqlSessionFactoryUtil.getSqlSessionFactory().openSession();
   OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
   List<Order> list = orderMapper.getOrderList();
   for (Order order : list) {
      System.out.println(order);
   }
   sqlSession.close();
}

      结果显示  

可以查询时用pojo属性名来作为不一致的一列的别名进行查询

<select id="getOrderList" resultType="order">
   SELECT
      `id`,
      `user_id` userId,
      `number`,
      `createtime`,
      `note`
   FROM `order`
</select>

还可以使用resultMap

       如果sql查询字段名和pojo属性不一致,可以通过resultMap将字段名和属性名作一个对应关系,resultMap将查询结果映射到pojo对象中,

       resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括和list实现一对一查询和一对多查询。

      使用 resultMap解决不一致映射问题

      sql配置

<resultMap id="order_list_map" type="order">
   <!--主键字段-->
   <id property="id" column="id"/>
   <!--非主键字段-->
   <result property="userId" column="user_id"/>
   <result property="number" column="number"/>
   <result property="createtime" column="createtime"/>
   <result property="note" column="note"/>
</resultMap>
<select id="getOrderListMap" resultMap="order_list_map">
   SELECT
      `id`,
      `user_id`,
      `number`,
      `createtime`,
      `note`
   FROM `order`
</select>

       OrderMapper接口添加List<Order> getOrderListMap()方法

       编写测试代码

@Test
public void testGetOrderListMap(){
   SqlSession sqlSession = SqlSessionFactoryUtil.getSqlSessionFactory().openSession();
   OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
   List<Order> list = orderMapper.getOrderListMap();
   for (Order order : list) {
      System.out.println(order);
   }
   sqlSession.close();
}

      结果显示

     

动态sql 

mybatis提供各种标签实现动态sql拼接

if标签

       sql配置

<select id="getUserByPojo" parameterType="user" resultType="user">
    SELECT
    `id`,
    `username`,
    `birthday`,
    `sex`,
    `address`
    FROM `user`
    WHERE 1 = 1
    <if test="username != null and username != ''">
        AND `username` LIKE '%${username}%'
    </if>
    <if test="sex != null and sex != ''">
        AND `sex` = #{sex}
    </if>
</select>

          UserMapper接口添加List<User> getUserByPojo(User user)方法

          测试代码

@Test
public void testGetUserByPojo(){
    SqlSession sqlSession = SqlSessionFactoryUtil.getSqlSessionFactory().openSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    User user = new User();
    user.setUsername("张");
    user.setSex("1");
    List<User> list = userMapper.getUserByPojo(user);
    for (User u : list) {
        System.out.println(u);
    }
}

where标签

       sql配置

       

<select id="getUserByPojo" parameterType="user" resultType="user">
    SELECT
    `id`,
    `username`,
    `birthday`,
    `sex`,
    `address`
    FROM `user`
    <!--where标签可以自动添加where关键字,同时处理sql语句中多余的and关键字-->
    <where>
        <if test="username != null and username != ''">
            AND `username` LIKE '%${username}%'
        </if>
        <if test="sex != null and sex != ''">
            AND `sex` = #{sex}
        </if>
    </where>
</select>

sql标签抽取sql片段

<!--sql片段抽取-->
<sql id="user_sql">
      `id`,
      `username`,
      `birthday`,
      `sex`,
      `address`
</sql>
<select id="getUserById" parameterType="int" resultType="user">
    SELECT
    <!--sql片段使用 refid为已定义的sql片段id-->
    <include refid="user_sql"/>
    FROM `user`
    WHERE `id` = #{id}
</select>

 foreach标签

       sql配置

<select id="getUserByIds" parameterType="queryvo" resultType="user">
    SELECT
    <include refid="user_sql"/>
    FROM `user`
    <where>
        <!-- foreach循环标签
         collection:遍历的集合
         open:循环开始之前的输出内容
         item:循环变量
         separator:分隔符
         close:循环结束之后输出的内容
        -->
        <foreach collection="ids" open="`id` IN(" item="uId" separator="," close=")">
            #{uId}
        </foreach>
    </where>
</select>

       UserMapper接口添加List<User> getUserByIds(QueryVo vo)方法 

       QueryVo添加List<Integer> ids属性并提供get/set方法

       测试代码

@Test
public void testGetUserByIds() {
    SqlSession sqlSession = SqlSessionFactoryUtil.getSqlSessionFactory().openSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    QueryVo vo = new QueryVo();

    vo.setIds(Arrays.asList(1, 25, 29, 30));

    List<User> list = userMapper.getUserByIds(vo);
    for (User user : list) {
        System.out.println(user);
    }
    sqlSession.close();
}

 关联查询

查询所有订单信息并关联到对应用户信息

方式一使用resultType

创建OrderUser pojo类

public class OrderUser extends Order {
    private String username;// 用户姓名
    private String address;// 地址

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

       sql配置

 

<select id="getOrderUser" resultType="orderuser">
   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`
</select>

       OrderMapper接口添加List<OrderUser> getOrderUser()方法  

       测试代码

@Test
public void testGetOrderUser() {
   SqlSession sqlSession = SqlSessionFactoryUtil.getSqlSessionFactory().openSession();
   OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
   List<OrderUser> list = orderMapper.getOrderUser();
   for (OrderUser orderUser : list) {
      System.out.println(orderUser);
   }
   sqlSession.close();
}

 方式二使用resultMap

       Order pojo类添加User user对象属性

       sql配置

<resultMap id="order_user_map" type="order">
   <!--主键字段-->
   <id property="id" column="id"/>
   <!--非主键字段-->
   <result property="userId" column="user_id"/>
   <result property="number" column="number"/>
   <result property="createtime" column="createtime"/>
   <result property="note" column="note"/>

   <!--
   association用于配置多对一关系
   property多的一方里的一的一方对象名称
   javaType一的一方类全路径名,支持别名
   -->
   <association property="user" javaType="cn.zjut.mybatis.pojo.User">
      <id property="id" column="user_id"/>

      <result property="username" column="username"/>
      <result property="address" column="address"/>
      <result property="birthday" column="birthday"/>
      <result property="sex" column="sex"/>
   </association>
</resultMap>
<select id="getOrderUserMap" resultMap="order_user_map">
   SELECT
     o.`id`,
     o.`user_id`,
     o.`number`,
     o.`createtime`,
     o.`note`,
     u.`username`,
     u.`address`,
     u.`birthday`,
     u.`sex`
   FROM
     `order` o
   LEFT JOIN `user` u
   ON u.`id` = o.`user_id`
</select>

       OrderMapper接口添加List<Order> getOrderUserMap()方法   

       测试代码

@Test
public void testGetOrderUserMap(){
   SqlSession sqlSession = SqlSessionFactoryUtil.getSqlSessionFactory().openSession();
   OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
   List<Order> list = orderMapper.getOrderUserMap();
   for (Order order : list) {
      System.out.println(order);
      System.out.println("此订单用户为: " + order.getUser());
   }
   sqlSession.close();
}

 一对多查询,查询用户关联查询所有订单信息

       User pojo类添加List<Order> orders对象属性

       sql配置

<resultMap id="user_order_map" type="user">
    <id property="id" column="id"/>

    <result property="username" column="username"/>
    <result property="birthday" column="birthday"/>
    <result property="sex" column="sex"/>
    <result property="address" column="address"/>
    <result property="uuid2" column="uuid2"/>

    <!--
    collection用于配置一对多关联
    property一的一方里的多的一方集合属性
    ofType多的一方类全路径,支持别名
    -->
    <collection property="orders" ofType="cn.zjut.mybatis.pojo.Order">
        <id property="id" column="oid"/>

        <result property="userId" column="id"/>
        <result property="number" column="number"/>
        <result property="createtime" column="createtime"/>
        <result property="note" column="note"/>
    </collection>
</resultMap>
<select id="getUserOrderMap" resultMap="user_order_map">
    SELECT
      u.`id`,
      u.`username`,
      u.`birthday`,
      u.`sex`,
      u.`address`,
      u.`uuid2`,
      o.`id` oid,
      o.`number`,
      o.`createtime`,
      o.`note`
    FROM
      `user` u
    LEFT JOIN `order` o
    ON o.`user_id` = u.`id`

</select>

       UserMapper接口添加List<User> getUserOrderMap()方法 

       测试代码

@Test
public void testGetUserOrderMap(){
    SqlSession sqlSession = SqlSessionFactoryUtil.getSqlSessionFactory().openSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

    List<User> list = userMapper.getUserOrderMap();
    for (User user: list) {
        System.out.println(user);
        for (Order order: user.getOrders()) {
            if (order.getId() != null)
                System.out.println("此用户订单: "+order);
        }
    }
}

Spring和Mybatis整合 

创建工程

导入jar包

加入配置文件

SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

</configuration>

applicationContext

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
   http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans ">

    <!-- 加载配置文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!--数据库连接池-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <!-- 连接池的最大数据库连接数 -->
        <property name="maxActive" value="10" />
        <!-- 最大空闲数 -->
        <property name="maxIdle" value="5" />
    </bean>
    <!-- SqlSessionFactory配置 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!-- 加载mybatis核心配置文件 -->
        <property name="configLocation" value="classpath:SqlMapConfig.xml"/>
        <!-- 别名包扫描 -->
        <property name="typeAliasesPackage" value="cn.zjut.mybatis.pojo"/>
    </bean>
</beans>

 创建cn.zjut.mybatis.pojo包

src添加log4j.properties、jdbc.properties文件

Dao开发

传统Dao开发

user.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="user">
    <select id="getUserById" parameterType="int" resultType="user">
        SELECT
          `id`,
          `username`,
          `birthday`,
          `sex`,
          `address`
        FROM `user`
        WHERE `id` = #{id}
    </select>
    <select id="getUserByUserName" parameterType="string" resultType="user">
        SELECT
          `id`,
          `username`,
          `birthday`,
          `sex`,
          `address`
        FROM `user`
        WHERE `username` LIKE '%${value}%'
    </select>
    <insert id="insertUser" parameterType="user">
      INSERT INTO `user`
                  (`username`,
                    `birthday`,
                    `sex`,
                     `address`)
            VALUES
                 (#{username},
                  #{birthday},
                  #{sex},
                 #{address})
   </insert>
</mapper>

加载user.xml映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <mappers>
        <mapper resource="user.xml" />
    </mappers>
</configuration>

创建pojo对象

 

import java.util.Date;

public class User {

   private Integer id;
   private String username;// 用户姓名
   private String sex;// 性别
   private Date birthday;// 生日
   private String address;// 地址
   private String uuid2;//uuid2

   public String getUuid2() {
      return uuid2;
   }

   public void setUuid2(String uuid2) {
      this.uuid2 = uuid2;
   }

   public Integer getId() {
      return id;
   }

   public void setId(Integer id) {
      this.id = id;
   }

   public String getUsername() {
      return username;
   }

   public void setUsername(String username) {
      this.username = username;
   }

   public String getSex() {
      return sex;
   }

   public void setSex(String sex) {
      this.sex = sex;
   }

   public Date getBirthday() {
      return birthday;
   }

   public void setBirthday(Date birthday) {
      this.birthday = birthday;
   }

   public String getAddress() {
      return address;
   }

   public void setAddress(String address) {
      this.address = address;
   }

   @Override
   public String toString() {
      return "id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address="
            + address + "uuid2=" + uuid2;
   }

}

 

import java.util.Date;

public class Order {
   private Integer id;

   private Integer userId;

   private String number;

   private Date createtime;

   private String note;

   public Integer getId() {
      return id;
   }

   public void setId(Integer id) {
      this.id = id;
   }

   public Integer getUserId() {
      return userId;
   }

   public void setUserId(Integer userId) {
      this.userId = userId;
   }

   public String getNumber() {
      return number;
   }

   public void setNumber(String number) {
      this.number = number == null ? null : number.trim();
   }

   public Date getCreatetime() {
      return createtime;
   }

   public void setCreatetime(Date createtime) {
      this.createtime = createtime;
   }

   public String getNote() {
      return note;
   }

   public void setNote(String note) {
      this.note = note == null ? null : note.trim();
   }

   @Override
   public String toString() {
      return "id=" + id + ", userId=" + userId + ", number=" + number + ", createtime=" + createtime
            + ", note=" + note;
   }

}

创建UserDao接口及实现类UserDaoImpl

 

import cn.zjut.mybatis.pojo.User;

import java.util.List;

public interface UserDao {
    User getUserById(Integer id);
    List<User> getUserByUserName(String userName);
    void insertUser(User user);
}
import cn.zjut.mybatis.dao.UserDao;
import cn.zjut.mybatis.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.support.SqlSessionDaoSupport;

import java.util.List;

public class UserDaoImpl  extends SqlSessionDaoSupport implements UserDao {
    @Override
    public User getUserById(Integer id) {
        SqlSession sqlSession = this.getSqlSession();
        User user = sqlSession.selectOne("user.getUserById", id);
        //这里不能关闭SqlSession,SqlSession由spring管理
        return user;
    }

    @Override
    public List<User> getUserByUserName(String userName) {
        SqlSession sqlSession = this.getSqlSession();
        List<User> list = sqlSession.selectList("user.getUserByUserName", userName);
        return list;
    }

    @Override
    public void insertUser(User user) {
        SqlSession sqlSession = this.getSqlSession();
        sqlSession.insert("user.insertUser", user);
	//事务交由spring管理
    }
}

 spring 配置Dao

<!-- 传统Dao配置 -->
<bean id="userDao" class="cn.zjut.mybatis.dao.impl.UserDaoImpl">
    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>

测试代码

import cn.zjut.mybatis.dao.UserDao;
import cn.zjut.mybatis.pojo.User;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.Date;
import java.util.List;

public class UserDaoTest {
    private ApplicationContext applicationContext;
    @Before
    public void init(){

        applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
    }
    @Test
    public void testGetUserById(){
        UserDao userDao = applicationContext.getBean(UserDao.class);
        User user = userDao.getUserById(28);
        System.out.println(user);
    }

    @Test
    public void testGetUserByUserName(){
        UserDao userDao = applicationContext.getBean(UserDao.class);
        List<User> list = userDao.getUserByUserName("张");
        for (User user: list) {
            System.out.println(user);
        }
    }
    @Test
    public void testInsertUser(){
        UserDao userDao = applicationContext.getBean(UserDao.class);
        User user = new User();
        user.setUsername("关昀");
        user.setSex("1");
        user.setBirthday(new Date());
        user.setAddress("杭州千岛湖");
        userDao.insertUser(user);
    }
}

动态代理方式开发

创建UserMapper接口类和UserMapper.xml映射文件

 

import cn.zjut.mybatis.pojo.User;

import java.util.List;

public interface UserMapper {
    User getUserById(Integer id);
    List<User> getUserByUserName(String userName);
    void insertUser(User user);
}

 

<?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="cn.zjut.mybatis.mapper.UserMapper">
    <sql id="user_sql">
          `id`,
          `username`,
          `birthday`,
          `sex`,
          `address`
    </sql>
    <select id="getUserById" parameterType="int" resultType="user">
        SELECT
        <include refid="user_sql"/>
        FROM `user`
        WHERE `id` = #{id}
    </select>

    <select id="getUserByUserName" parameterType="string" resultType="user">
        SELECT
        <include refid="user_sql"/>
        FROM `user`
        WHERE `username` LIKE '%${value}%'
    </select>

    <insert id="insertUser" parameterType="user">
      INSERT INTO `user`
                  (`username`,
                    `birthday`,
                    `sex`,
                     `address`)
            VALUES
                 (#{username},
                  #{birthday},
                  #{sex},
                 #{address})
   </insert>
</mapper>

spring配置动态代理

<!-- 动态代理方式配置 第一种方式 -->
<!--
<bean id="baseMapper" class="org.mybatis.spring.mapper.MapperFactoryBean" abstract="true" lazy-init="true">
     <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
-->
<!-- 配置一个接口 -->
<!--
<bean parent="baseMapper">
      <property name="mapperInterface" value="cn.zjut.mybatis.mapper.UserMapper" />
</bean>
-->

<!-- 动态代理方式配置 第二种方式 -->
<!-- 包扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!-- basePackage:配置映射包装扫描,多个包时用","或";"分隔 -->
    <property name="basePackage" value="cn.zjut.mybatis.mapper" />
</bean>

测试代码

 

import cn.zjut.mybatis.mapper.UserMapper;
import cn.zjut.mybatis.pojo.User;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.Date;
import java.util.List;

public class UserMapperTest {
    private ApplicationContext applicationContext;
    @Before
    public void init(){
        applicationContext = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
    }
    @Test
    public void testGetUserById(){
        UserMapper userMapper = applicationContext.getBean(UserMapper.class);
        User user = userMapper.getUserById(28);
        System.out.println(user);
    }
    @Test
    public void testGetUserByUserName(){
        UserMapper userMapper = applicationContext.getBean(UserMapper.class);
        List<User> list = userMapper.getUserByUserName("张");
        for (User user: list) {
            System.out.println(user);
        }
    }
    @Test
    public void testInsertUser(){
        UserMapper userMapper = applicationContext.getBean(UserMapper.class);
        User user = new User();
        user.setUsername("关一发");
        user.setSex("1");
        user.setBirthday(new Date());
        user.setAddress("杭州上城");
        userMapper.insertUser(user);
    }
}

mybatis逆向工程 

创建工程generatorSqlmapCustom

导入jar包

src目录下导入log4j.properties文件

log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

工程目录下创建生成配置文件generatorConfig.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
  PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
   <context id="testTables" targetRuntime="MyBatis3">
      <commentGenerator>
         <!-- 是否去除自动生成的注释 true:是 : false:否 -->
         <property name="suppressAllComments" value="true" />
      </commentGenerator>
      <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
      <jdbcConnection driverClass="com.mysql.jdbc.Driver"
         connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root" password="1234">
      </jdbcConnection>
      <!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
         connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg" 
         userId="yycg"
         password="yycg">
      </jdbcConnection> -->

      <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 
         NUMERIC 类型解析为java.math.BigDecimal -->
      <javaTypeResolver>
         <property name="forceBigDecimals" value="false" />
      </javaTypeResolver>

      <!-- targetProject:生成PO类的位置 -->
      <javaModelGenerator targetPackage="cn.zjut.ssm.pojo"
         targetProject=".\src">
         <!-- enableSubPackages:是否让schema作为包的后缀 -->
         <property name="enableSubPackages" value="false" />
         <!-- 从数据库返回的值被清理前后的空格 -->
         <property name="trimStrings" value="true" />
      </javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置 -->
      <sqlMapGenerator targetPackage="cn.zjut.ssm.mapper"
         targetProject=".\src">
         <!-- enableSubPackages:是否让schema作为包的后缀 -->
         <property name="enableSubPackages" value="false" />
      </sqlMapGenerator>
      <!-- targetPackage:mapper接口生成的位置 -->
      <javaClientGenerator type="XMLMAPPER"
         targetPackage="cn.zjut.ssm.mapper"
         targetProject=".\src">
         <!-- enableSubPackages:是否让schema作为包的后缀 -->
         <property name="enableSubPackages" value="false" />
      </javaClientGenerator>
      <!-- 指定数据库表 -->
      <table schema="" tableName="user"></table>
      <table schema="" tableName="order"></table>
      
      <!-- 有些表的字段需要指定java类型
       <table schema="" tableName="">
         <columnOverride column="" javaType="" />
      </table> -->
   </context>
</generatorConfiguration>

在src目录下创建逆向工程类GeneratorSqlmap

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class GeneratorSqlmap {
    public void generator() throws Exception{

        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        //指定 逆向工程配置文件
        File configFile = new File("generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);

    }
    public static void main(String[] args) throws Exception {
        try {
            GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
            generatorSqlmap.generator();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

运行程序main,将生成的包和文件拷贝到所需工程中

Spring配置包扫描,加载映射文件

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="cn.zjut.ssm.mapper"/>
</bean>

 创建测试类UserMapperGTest及编写测试程序

import cn.zjut.ssm.mapper.UserMapper;
import cn.zjut.ssm.pojo.User;
import cn.zjut.ssm.pojo.UserExample;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;

public class UserMapperGTest {
    private ApplicationContext applicationContext;

    @Before
    public void init(){
        applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    }
    //如果相应字段为空 则对应的表字段不插入数据
    //Preparing: insert into user ( username, address ) values ( ?, ? )
    //Parameters: 诸葛亮(String), 杭州富阳(String)
    @Test
    public void testInsertSelective() {
        UserMapper userMapper = applicationContext.getBean(UserMapper.class);
        User user = new User();
        user.setUsername("诸葛亮");
        user.setAddress("杭州富阳");
        userMapper.insertSelective(user);
    }
    /**
     * 按照主键查询用户
     */
    @Test
    public void testSelectByPrimaryKey() {
        UserMapper userMapper = applicationContext.getBean(UserMapper.class);
        User user = userMapper.selectByPrimaryKey(28);
        System.out.println(user);
    }

    /**
     * 拼接查询条件
     */
    @Test
    public void testSelectByExample() {
        UserMapper userMapper = applicationContext.getBean(UserMapper.class);
        UserExample userExample = new UserExample();
        //创建criteria
        UserExample.Criteria criteria = userExample.createCriteria();
        //设置查询条件
        criteria.andUsernameLike("%张%");
        criteria.andSexEqualTo("2");
        List<User> list = userMapper.selectByExample(userExample);
        for (User user : list) {
            System.out.println(user);
        }
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

       

 

 

        

 

 

 

 

 

 

 

 

 

       

 

  

 

    

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值