9月26日MyBatis笔记

标签

mybatis

mysql

数据库

select

发布时间:

本文字数:525 字 阅读完需:约 3 分钟

MyBatis 基础

代码示例

AppTest.java

package com.zr;

import static org.junit.Assert.assertTrue;

import com.zr.dao.UserDao;
import com.zr.vo.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.Test;

import java.io.IOException;
import java.io.Reader;

/**
 * Unit test for simple App.
 */
public class AppTest 
{
    /**
     * Rigorous Test :-)
     */
    @Test
    public void test01() throws IOException {
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
        //SqlSessionFactory对象封装了需要连接的数据源、表-vo-dao对应关系
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
        //相当于jdbc的connection对象, openSession(false)代表手动事务, openSession(true)代表自动事务, 默认为false
        SqlSession sqlSession = factory.openSession(false);
        //获取dao接口的实现类,该实现类由mybatis动态(动态代理)生成
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        //调用实现类的方法,注意:接口方法必须和对应的映射.xml文件中标签的id值一致
        User user = userDao.selectByPrimaryKey("admin");
        //提交事务 sqlSession.commit();
        //回滚事务 sqlSession.rollback();
        System.out.println(user);
        //关闭连接
        sqlSession.close();
        reader.close();
    }
}

关系映射文件 resources/com/zr/dao/UserDao.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.zr.dao.UserDao">
    <resultMap id="BaseResultMap" type="com.zr.vo.User">
        <id column="user_id" property="userId"></id>
        <result column="user_name" property="userName"></result>
        <result column="password" property="password"></result>
        <result column="sex" property="sex"></result>
        <result column="tel" property="tel"></result>
        <result column="status" property="status"></result>
        <result column="img" property="img"></result>
        <result column="create_time" property="createTime"></result>
        <result column="create_user" property="createUser"></result>
        <result column="modify_time" property="modifyTime"></result>
        <result column="modify_user" property="modifyUser"></result>
    </resultMap>
    <select id="selectByPrimaryKey" resultMap="BaseResultMap">
        select * from t_user where user_id = #{userId}
    </select>
</mapper>

配置文件 mybatis-config.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>
<!--	环境标签代表数据库,default代表默认连接的数据库id-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/test" />
                <property name="username" value="root" />
                <property name="password" value="mysql" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/zr/dao/UserDao.xml"></mapper>
    </mappers>
</configuration>

OGNL 表达式

OGNL(Object Graphic Navigation Language, 对象图导航语言)
alt

  1. 方法参数是String 或基本数据类型(包装器类型)
    select(String userName) #{userName}
  2. 参数是JavaBean对象类型
    add(User user) #{属性名} #{userId} #{password}
  3. 参数是Map的时候
    add(Map<String, Object>) #{key} #{userId}
  4. 多参数1
    queryList(@Param("a")String userId, @Param("b")String userName) #{a} #{b}
  5. 多参数2
    list(@Param("u") User user, @Param("d")String deptId) #{u.userId} #{u.userName} #{d}

注意 在xml中,如果参数是字符串类型,如#{userName}===>'张三' (自动加单引号), 写 ${userName}====>张三 没有单引号

resultMap 和 resultType的区别

二者不可共存

resultType: 方法返回值是具体的类型,数据库表的【列名】映射到返回值上,如果返回值是JavaBean, 那么返回值映射关系为:列名-->属性名
resultMap: 自定义的映射关系

显示sql语句和其他细节

mybatis-config.xml

<configuration>
	<settings>
		<setting name="logImpl" value="org.apache.ibatis.logging.stdout.StdOutImpl"/>
	</settings>