mybatis基础之二

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">
<!-- namespace命名空间,就是对sql进行分类化管理 理解sql隔离 -->
<mapper namespace="com.liu.mybatis.mapper.UserMapper">
   <!-- 定义一个resultMap  -->
   <resultMap type="user" id="userResultMap">
     <id column="id_" property="id"/>
     <result column="address_" property="address"/>
   </resultMap>
   <!-- 定义sql片段 -->
   <sql id="user_query_where">
       <if test="userCustom!=null">
           <if test="userCustom.sex!=null and userCustom.sex!=‘‘">
               and user.sex=#{userCustom.sex}
           </if>
           <if test="userCustom.username!=null and userCustom.username!=‘‘">
               and user.username like ‘%${userCustom.username}%‘
           </if>
        </if>
   </sql>
   <!-- 在映射文件中配置sql语句 -->
   <!-- 通过ID查询sql记录 -->
   <!-- 通过select来执行查询
   id: 标识映射文件中的sql 称为statement的id
           将sql语句封装到mappedStatement中
   parameterType:指定输入参数的类型 ,这里指定int型
   #{}表示一个占位符
   #{id} 表示接收输入的参数  id就是输入的参数名称
   resultTypeL: 指定sql输出结果的javadui类型
     -->
   <select id="findUserById" parameterType="int" resultType="com.liu.mybatis.po.User">
      SELECT * FROM USER WHERE id = #{id}
   </select>
   <!-- 使用resultMap输出映射 -->
   <select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap">
      SELECT id id_,address address_ FROM USER WHERE id = #{id}
   </select>
   <!-- ${}是一个拼接符号 -->
   <select id="findUserByName" parameterType="java.lang.String" resultType="user">
      SELECT * FROM USER WHERE username like ‘%${value}%‘
   </select>
      <!-- 用户信息综合查询 -->
   <select id="findUserList" parameterType="com.liu.mybatis.po.UserQueryVo"
           resultType="com.liu.mybatis.po.UserCustom">
      select * from user
     <where>
        <if test="userCustom!=null">
           <if test="userCustom.sex!=null and userCustom.sex!=‘‘">
               and user.sex=#{userCustom.sex}
           </if>
           <if test="userCustom.username!=null and userCustom.username!=‘‘">
               and user.username like ‘%${userCustom.username}%‘
           </if>
        </if>
        <if test="ids!=null">
          <!-- foreach实现sql的拼接 and id=1 or id=3 or id=5  -->
          <foreach collection="ids" item="user_id" open="AND (" close=")" separator="or">
            id=#{user_id}
          </foreach>
          <!-- foreach实现sql的拼接 and id in (1,3,5)  -->
          <!-- <foreach collection="ids" item="user_id" open="and id in (" close=")" separater=",">
            #{user_id}
          </foreach>    -->
        </if>
     </where>
   </select>
   <!-- 用户信息总数查询 -->
   <select id="findUserCount" parameterType="com.liu.mybatis.po.UserQueryVo" resultType="int">
      select * from user
      <where>
        <include refid="user_query_where"></include>
     </where>
   </select>
   <!-- selectkey获取自增主键 -->
   <insert id="insertUser" parameterType="com.liu.mybatis.po.User">
      <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
        SELECT LAST_INSERT_ID()
      </selectKey>
      insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
   </insert>
   <delete id="deleteUser" parameterType="java.lang.Integer">
      delete from user where id = #{id}
   </delete>
   <update id="updateUser" parameterType="com.liu.mybatis.po.User">
      update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
   </update>

</mapper>

UserMapper.java

package com.liu.mybatis.mapper;

import java.util.List;

import com.liu.mybatis.po.User;
import com.liu.mybatis.po.UserCustom;
import com.liu.mybatis.po.UserQueryVo;

public interface UserMapper {
    public List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception;

    public int findUserCount(UserQueryVo userQueryVo) throws Exception;

    public User findUserById(int id) throws Exception;

    public User findUserByIdResultMap(int id) throws Exception;

    public List<User> findUserByName(String username) throws Exception;

    public void insertUser(User user) throws Exception;

    public void deleteUser(int id) throws Exception;

}

UserQueryVo.java

package com.liu.mybatis.po;

import java.util.List;

/*
 * 包装类型
 */
public class UserQueryVo {
    private UserCustom userCustom;

    private List<Integer> ids;

    public UserCustom getUserCustom() {
        return userCustom;
    }

    public void setUserCustom(UserCustom userCustom) {
        this.userCustom = userCustom;
    }

    public List<Integer> getIds() {
        return ids;
    }

    public void setIds(List<Integer> ids) {
        this.ids = ids;
    }

}

UserCustom.java

package com.liu.mybatis.po;

/*
 * 用户的扩展类
 */
public class UserCustom extends User{

}

测试程序

package com.liu.mybatis.mapper;

import static org.junit.Assert.*;

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

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.Before;
import org.junit.Test;

import com.liu.mybatis.po.User;
import com.liu.mybatis.po.UserCustom;
import com.liu.mybatis.po.UserQueryVo;

public class UserMapperTest {
    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void setUp() throws Exception {
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建会话工厂
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    @Test
    public void testFindUserById() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //创建UserMapper对象,mybatis自动生成mapper代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        System.out.println(UserMapper.class);

        User user = userMapper.findUserById(28);

        System.out.println("20170902 =" + user);
    }

    @Test
    public void testFindUserByName() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //创建UserMapper对象,mybatis自动生成mapper代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        List<User> list = userMapper.findUserByName("晓春");

        System.out.println("20170902 =" + list);
    }
    //用户综合信息查询
    @Test
    public void testFindUserList() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //创建UserMapper对象,mybatis自动生成mapper代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        System.out.println("11111111111111111===================");
        UserQueryVo userQueryVo =new UserQueryVo();

        UserCustom userCustom = new UserCustom();
        userCustom.setUsername("王晓春");
        //userCustom.setSex("1");
        List<Integer> ids= new ArrayList<Integer>();
        ids.add(1);
        ids.add(28);
        ids.add(30);
        userQueryVo.setIds(ids);
        userQueryVo.setUserCustom(userCustom);

        List<UserCustom> list = userMapper.findUserList(userQueryVo);

        System.out.println("20170903  10:15 =" + list);
    }

    @Test
    public void testFindUserCount() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //创建UserMapper对象,mybatis自动生成mapper代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        UserQueryVo userQueryVo =new UserQueryVo();

        UserCustom userCustom = new UserCustom();
        userCustom.setUsername("王晓春");
        userCustom.setSex("1");
        userQueryVo.setUserCustom(userCustom);

        int count = userMapper.findUserCount(userQueryVo);

        System.out.println("20170902  23:15 =" + count);
    }

    @Test
    public void testFindUserByIdResultMap() throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //创建UserMapper对象,mybatis自动生成mapper代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

        User user = userMapper.findUserByIdResultMap(28);

        System.out.println("20170902 ===" + user);
    }
}
时间: 2024-08-25 10:49:17

mybatis基础之二的相关文章

mybatis基础(二)

上接mybatis基础(二) 开发规范: 1.在mapper.xml中namespace等于mapper接口地址 2.mapper.java接口中的方法名和mapper.xml中statement的id一致 3.mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致. 4.mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致. 9.properties

Mybatis基础学习(二)&mdash;开发Dao方式

一.原始Dao开发方式 UserDao.java public interface UserDao{ public User findUserByID(Serializable id); public List<User> findUsersByName(String name); } UserDaoImpl.java public class UserDaoImpl implements UserDao{ //SqlSessionFactory是单例存在,不应该在具体实例中创建,需要外部依赖

mybatis基础学习二

操作users表的CRUD XML实现方式 定义sql映射xml文件 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"> <m

Mybatis基础: 常见问题与FAQ

Mybatis基础: #{...} 和 ${...} 的区别 MyBatis将 #{-} 解释为JDBC prepared statement 的一个参数标记.而将 ${-} 解释为字符串替换.理解这两者的区别是很有用的, 因为在某些SQL语句中并不能使用参数标记(parameter markers). 比如,我们不能在表名(table name)的位置使用参数标记.假设有下面的代码: Map<String, Object> parms = new HashMap<String, Obj

mybatis基础系列(一)&mdash;&mdash;mybatis入门

好久不发博客了,写博文的一个好处是能让心静来,整理下之前学习过的一些知识一起分享,大神路过~ mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.传统的 JDBC代码通常存在如下问题: 1. 频繁对数据库进行连接和关闭,造成资源浪费,性能下降. 2. SQL代码.preparedStatement参数.占位符号等硬编码到代码中,不方便维护. 3. 遍历结果集数据时,硬编码解析表字段成java属性,不方便维护. MyBatis 避免了几乎所有的

Mybatis基础(一)

mybatis概述: MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型.接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录. 安装mybatis: 1.方式一:直接将mybatis-x.x.x.jar文件放置在classpath中,一般情况不用这种.

Python基础(二)

Python基础(二) Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典.set集合) for 循环 enumrate range和xrange 编码与进制转换 Python 运算符 1.算术运算: 2.比较运算: 3.赋值运算: 4.逻辑运算:  5.成员运算: 基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483

Python之路【第三篇】:Python基础(二)

Python之路[第三篇]:Python基础(二) 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 1 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  file(...) ,本质上前者在内部会调用后者来进行文件操作,推荐使用 open. 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作.

MySQL 基础(二)

MySQL 基础(二) ============================================================================== 概述: ============================================================================== MySQL   1.数据结构: ★分类: 结构化数据:  关系型数据库 半结构化数据:YAML.XML.JSON 非结构化数据:日志文件,NoSQL