9月26日MyBatis笔记
发布时间:
本文字数: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, 对象图导航语言)
- 方法参数是String 或基本数据类型(包装器类型)
select(String userName) #{userName}
- 参数是JavaBean对象类型
add(User user) #{属性名} #{userId} #{password}
- 参数是Map的时候
add(Map<String, Object>) #{key} #{userId}
- 多参数1
queryList(@Param("a")String userId, @Param("b")String userName) #{a} #{b}
- 多参数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>
Powerd by YlBlog(玉龙博客)