MyBatis 基础讲解
简介:本文中讲解为一个小项目,其中从test1-test7包中的内容分别是,xml方式、注解方式(接口模式)、字段名称不对应的配置、一对一关系映射、一对多关系映射、动态sql和模糊查询--多条件查询、缓存机制
1、项目清单
2、bean包
package com.atguigu.day03_mybaits.bean;
import java.util.List;
public class Classes {
private int id;
private String name;
private Teacher teacher;
private List<Student> students;
public Classes(int id, String name, Teacher teacher, List<Student> students) {
super();
this.id = id;
this.name = name;
this.teacher = teacher;
this.students = students;
}
public Classes(int id, String name, Teacher teacher) {
super();
this.id = id;
this.name = name;
this.teacher = teacher;
}
public Classes() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
public List<Student> getList() {
return students;
}
public void setList(List<Student> students) {
this.students = students;
}
@Override
public String toString() {
return "Classes [id=" + id + ", name=" + name + ", teacher=" + teacher
+ ", students=" + students + "]";
}
}
package com.atguigu.day03_mybaits.bean;
/**
* 多条件查询封装类
*/
public class ConditionUser {
private String name;
private int minAge;
private int maxAge;
public ConditionUser(String name, int minAge, int maxAge) {
super();
this.name = name;
this.minAge = minAge;
this.maxAge = maxAge;
}
public ConditionUser() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMinAge() {
return minAge;
}
public void setMinAge(int minAge) {
this.minAge = minAge;
}
public int getMaxAge() {
return maxAge;
}
public void setMaxAge(int maxAge) {
this.maxAge = maxAge;
}
@Override
public String toString() {
return "ConditionUser [name=" + name + ", minAge=" + minAge
+ ", maxAge=" + maxAge + "]";
}
}
package com.atguigu.day03_mybaits.bean;
import java.io.Serializable;
public class CUser implements Serializable {
private int id;
private String name;
private int age;
public CUser(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public CUser() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
package com.atguigu.day03_mybaits.bean;
public class Order {
private int id;
private String orderNo;
private float price;
public Order(int id, String orderNo, float price) {
super();
this.id = id;
this.orderNo = orderNo;
this.price = price;
}
public Order() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
@Override
public String toString() {
return "Order [id=" + id + ", orderNo=" + orderNo + ", price=" + price
+ "]";
}
}
package com.atguigu.day03_mybaits.bean;
public class PUser {
private String id;
private String name;
private String sex;
public PUser(String id, String name, String sex) {
super();
this.id = id;
this.name = name;
this.sex = sex;
}
public PUser() {
super();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "PUser [id=" + id + ", name=" + name + ", sex=" + sex + "]";
}
}
package com.atguigu.day03_mybaits.bean;
public class Student {
private int id;
private String name;
public Student(int id, String name) {
super();
this.id = id;
this.name = name;
}
public Student() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
}
package com.atguigu.day03_mybaits.bean;
public class Teacher {
private int id;
private String name;
public Teacher(int id, String name) {
super();
this.id = id;
this.name = name;
}
public Teacher() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + "]";
}
}
package com.atguigu.day03_mybaits.bean;
import java.io.Serializable;
public class User {
//shift+alt+s
private int id;
private String name;
private int age;
public User(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public User() {
super();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
3、test1(xml方式)
package com.atguigu.day03_mybaits.test1;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.atguigu.day03_mybaits.bean.User;
/**
* xml方式测试用例
*/
public class Test {
public static void main(String[] args) throws IOException {
String resource = "conf.xml";
InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
String statement = "com.atguigu.day03_mybaits.test1.userMapper.addUser";
session.insert(statement, new User(-1, "刘志华", 27));
session.commit();
}
@org.junit.Test
public void deleteUser(){
String resource = "conf.xml";
InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
String statement = "com.atguigu.day03_mybaits.test1.userMapper.deleteUser";
System.out.println(session.delete(statement, 6));;
session.commit();
}
@org.junit.Test
public void getAllUser(){
String resource = "conf.xml";
InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
String statement = "com.atguigu.day03_mybaits.test1.userMapper.getAllUsers";
List<User> l =session.selectList(statement);
System.out.println(l);
}
}
<?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 是随意的 ,只是多个namespace 不能重复而已-->
<mapper namespace="com.atguigu.day03_mybaits.test1.userMapper">
<!--
CRUD操作
-->
<insert id="addUser" parameterType="com.atguigu.day03_mybaits.bean.User">
insert into users(name, age) values(#{name}, #{age})
</insert>
<!-- #{id} id随意写,因为只有一个参数传入 -->
<delete id="deleteUser" parameterType="int">
delete from users where id=#{id}
</delete>
<!-- #{name} 必须写的是User的属因名称 -->
<update id="updateUser" parameterType="com.atguigu.day03_mybaits.bean.User">
update users set name=#{name},age=#{age} where id=#{id}
</update>
<select id="getUser" parameterType="int" resultType="com.atguigu.day03_mybaits.bean.User">
select * from users where id=#{id}
</select>
<!--
List<User> l =session.selectList(statement)方法中就是要查找一个list,此处只要写好了是User类型的List即可
-->
<select id="getAllUsers" resultType="com.atguigu.day03_mybaits.bean.User">
select * from users
</select>
</mapper>
4、test2(注解方式)
package com.atguigu.day03_mybaits.test2;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.atguigu.day03_mybaits.bean.User;
/**
* 注解方式(接口)测试用例
*/
public class Test {
@org.junit.Test
public void getAllUser(){
String resource = "conf.xml";
InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
//下面 就是xml文件和注解方式的差别
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> l = mapper.getAllUser();
System.out.println(l);
}
}
package com.atguigu.day03_mybaits.test2;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.atguigu.day03_mybaits.bean.User;
/**
*注解方式:
*1.在接口中输入sql语句
*2.参数一定要写入表明
*3.返回值的类型一定要确定
*4.在conf.xml中一定要配置<mapper class="com.atguigu.day03_mybaits.test2.UserMapper"/>
*/
public interface UserMapper {
@Select("select * from Users where id = #{id}")
public User getUser(int id);
@Insert("insert into users(name, age) values(#{name}, #{age})")
public int addUser(User user);
@Update("update users set name=#{name},age=#{age} where id=#{id}")
public int updateUser(User user);
@Delete("delete from users where id=#{id}")
public int deleteUser(int id);
@Select("select * from users")
public List<User> getAllUser();
}
5、test3(字段名称不对应的配置)
package com.atguigu.day03_mybaits.test3;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.atguigu.day03_mybaits.bean.Order;
import com.atguigu.day03_mybaits.bean.User;
/**
* 字段名称不对应的测试
*/
public class Test {
@org.junit.Test
public void getAllUser(){
String resource = "conf.xml";
InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
Order o =session.selectOne("com.atguigu.day03_mybaits.test3.orderMapper.getOrder", 1);
System.out.println(o);
}
@org.junit.Test
public void getAllUser2(){
String resource = "conf.xml";
InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
Order o =session.selectOne("com.atguigu.day03_mybaits.test3.orderMapper.getOrder2", 2);
System.out.println(o);
}
}
<?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.atguigu.day03_mybaits.test3.orderMapper">
<!-- javaBean和数据库字段不对应,使用sql重启别名 -->
<select id="getOrder" parameterType="int" resultType="Order">
select order_id id,order_no orderNo,order_price price from orders where order_id=#{id}
</select>
<!-- 第二种方法,使用 resultMap 用来封装一系列映射 -->
<select id="getOrder2" resultType="Order" resultMap="getOrder2Map">
select * from orders where order_id=#{id}
</select>
<resultMap type="Order" id="getOrder2Map">
<id property="id" column="order_id"/>
<result property="orderNo" column="order_no"/>
<result property="price" column="order_price"/>
</resultMap>
</mapper>
6、test4(一对一关系映射)
package com.atguigu.day03_mybaits.test4;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.atguigu.day03_mybaits.bean.Classes;
import com.atguigu.day03_mybaits.bean.Order;
/**
* 一对一关系映射
*/
public class Test {
@org.junit.Test
public void getAllClasses(){
String resource = "conf.xml";
InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
Classes c =session.selectOne("com.atguigu.day03_mybaits.test4.classMapper.getClass", 1);
System.out.println(c);
}
@org.junit.Test
public void getAllClasses2(){
String resource = "conf.xml";
InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
Classes c =session.selectOne("com.atguigu.day03_mybaits.test4.classMapper.getClass2", 1);
System.out.println(c);
}
}
<?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.atguigu.day03_mybaits.test4.classMapper">
<!--
方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集 封装联表查询的数据(去除重复的数据) select * from class
c, teacher t where c.teacher_id=t.t_id and c.c_id=1
-->
<select id="getClass" parameterType="int" resultMap="ClassResultMap">
select *
from class c, teacher t where c.teacher_id=t.t_id and c.c_id=#{id}
</select>
<resultMap type="_Classes" id="ClassResultMap">
<id property="id" column="c_id" />
<result property="name" column="c_name" />
<!-- association 实现关联了一 ‘个’ 对象 -->
<association property="teacher" javaType="_Teacher">
<id property="id" column="t_id" />
<result property="name" column="t_name" />
</association>
</resultMap>
<!--
方式二:嵌套查询:通过执行另外一个SQL映射语句来返回预期的复杂类型 SELECT * FROM class WHERE c_id=1;
SELECT * FROM teacher WHERE t_id=1 //1 是上一个查询得到的teacher_id的值
-->
<select id="getClass2" parameterType="int" resultMap="ClassResultMap2">
select * from class where c_id=#{id}
</select>
<resultMap type="_Classes" id="ClassResultMap2">
<id property="id" column="c_id" />
<result property="name" column="c_name" />
<association property="teacher" column="teacher_id"
select="getTeacher">
</association>
</resultMap>
<select id="getTeacher" parameterType="int" resultType="_Teacher">
SELECT t_id id, t_name name FROM teacher WHERE t_id=#{id}
</select>
</mapper>
7、test5(一对多关系映射)
package com.atguigu.day03_mybaits.test5;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.atguigu.day03_mybaits.bean.Classes;
import com.atguigu.day03_mybaits.bean.Order;
/**
* 一对多关系映射
*/
public class Test {
@org.junit.Test
public void getAllClasses(){
String resource = "conf.xml";
InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
Classes c =session.selectOne("com.atguigu.day03_mybaits.test5.classMapper.getClass3", 1);
System.out.println(c);
}
@org.junit.Test
public void getAllClasses2(){
String resource = "conf.xml";
InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
Classes c =session.selectOne("com.atguigu.day03_mybaits.test5.classMapper.getClass4", 1);
System.out.println(c);
}
}
<?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.atguigu.day03_mybaits.test5.classMapper">
<!--
方式一: 嵌套结果: 使用嵌套结果映射来处理重复的联合结果的子集
SELECT * FROM class c, teacher t,student s WHERE c.teacher_id=t.t_id AND c.C_id=s.class_id AND c.c_id=1
-->
<select id="getClass3" parameterType="int" resultMap="ClassResultMap3">
select * from class c, teacher t,student s where c.teacher_id=t.t_id and c.C_id=s.class_id and c.c_id=#{id}
</select>
<resultMap type="_Classes" id="ClassResultMap3">
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<association property="teacher" column="teacher_id" javaType="_Teacher">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
</association>
<!-- ofType指定students集合中的对象类型 -->
<collection property="students" ofType="_Student">
<id property="id" column="s_id"/>
<result property="name" column="s_name"/>
</collection>
</resultMap>
<!--
方式二:嵌套查询:通过执行另外一个SQL映射语句来返回预期的复杂类型
SELECT * FROM class WHERE c_id=1;
SELECT * FROM teacher WHERE t_id=1 //1 是上一个查询得到的teacher_id的值
SELECT * FROM student WHERE class_id=1 //1是第一个查询得到的c_id字段的值
-->
<select id="getClass4" parameterType="int" resultMap="ClassResultMap4">
select * from class where c_id=#{id}
</select>
<resultMap type="_Classes" id="ClassResultMap4">
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<association property="teacher" column="teacher_id" javaType="_Teacher" >
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
</association>
<collection property="students" ofType="_Student" column="c_id" select="getStudent"></collection>
</resultMap>
<select id="getTeacher2" parameterType="int" resultType="_Teacher">
SELECT t_id id, t_name name FROM teacher WHERE t_id=#{id}
</select>
<select id="getStudent" parameterType="int" resultType="_Student">
SELECT s_id id, s_name name FROM student WHERE class_id=#{id}
</select>
</mapper>
8、test6(动态sql和模糊查询--多条件查询)
package com.atguigu.day03_mybaits.test6;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
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 com.atguigu.day03_mybaits.bean.Classes;
import com.atguigu.day03_mybaits.bean.ConditionUser;
import com.atguigu.day03_mybaits.bean.Order;
import com.atguigu.day03_mybaits.bean.User;
/**
* 动态sql和模糊查询--多条件查询
*/
public class Test {
@org.junit.Test
public void getUser() throws IOException{
Reader reader = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sessionFactory.openSession();
String statement = "com.atguigu.day03_mybaits.test6.userMapper.getUser";
List<User> list = sqlSession.selectList(statement, new ConditionUser("%null%", 1, 12));
System.out.println(list);
}
}
<?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.atguigu.day03_mybaits.test6.userMapper">
<select id="getUser" parameterType="com.atguigu.day03_mybaits.bean.ConditionUser" resultType="com.atguigu.day03_mybaits.bean.User">
<!-- ‘<’ 这个符号不能写 使用<代替 -->
select * from d_user where age>=#{minAge} and age<=#{maxAge}
<!-- 此处注意单引号和双引号的位置 如果传入的name是null的情况,要使用此方法判断,防止数据查询问题 -->
<if test='name!="%null%"'>and name like #{name}</if>
</select>
</mapper>
9、test7(缓存机制)
package com.atguigu.day03_mybaits.test7;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
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 com.atguigu.day03_mybaits.bean.Classes;
import com.atguigu.day03_mybaits.bean.ConditionUser;
import com.atguigu.day03_mybaits.bean.Order;
import com.atguigu.day03_mybaits.bean.User;
import com.atguigu.day03_mybaits.util.MybatisUtils;
/**
* 一级缓存 session级别的缓存
*/
public class Test {
@org.junit.Test
public void testCache1() throws IOException {
Reader reader = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
String statement = "com.atguigu.mybatis.test7.userMapper.getUser";
User user = session.selectOne(statement, 1);
System.out.println(user);
/*
* 一级缓存默认就会被使用,sql只调用了一次
*/
user = session.selectOne(statement, 1);
System.out.println(user);
/*
1. 必须是同一个Session,如果session对象已经close()过了就不可能用了
*/
/*
session = MybatisUtils.getSession();
user = session.selectOne(statement, 1);
System.out.println(user);
*/
/*
2. 查询条件是一样的
*/
/*
user = session.selectOne(statement, 2);
System.out.println(user);
*/
/*
3. 没有执行过session.clearCache()清理缓存
*/
/*
session.clearCache();
user = session.selectOne(statement, 2);
System.out.println(user);
*/
/*
4. 没有执行过增删改的操作(这些操作都会清理缓存)
*/
/*
session.update("com.atguigu.mybatis.test8.userMapper.updateUser",
new User(2, "user", 23));
user = session.selectOne(statement, 2);
System.out.println(user);
*/
}
}
package com.atguigu.day03_mybaits.test7;
import java.io.IOException;
import java.io.Reader;
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 com.atguigu.day03_mybaits.bean.User;
import com.atguigu.day03_mybaits.util.MybatisUtils;
/**
* Mybatis二级缓存
* 1.添加一个<cache>在userMapper.xml中
* <cache
eviction="FIFO" //回收策略为先进先出
flushInterval="60000" //自动刷新时间60s
size="512" //最多缓存512个引用对象
readOnly="true"/> //只读
* 2.基于SqlSessionFactory的二级缓存,open不同的session
*/
public class Test2 {
@Test
public void testCache2() throws IOException {
String statement = "com.atguigu.mybatis.test7.userMapper.getUser";
/**
* 没有加入<cache>sql发送了两次
* 注意此处要session.commit();二级缓存才能体现出来.
* User 最好序列化
*/
SqlSessionFactory sessionFactory = MybatisUtils.getFactory();
SqlSession session = sessionFactory.openSession();
SqlSession session2 = sessionFactory.openSession();
User user = session.selectOne(statement, 1);
session.commit();
System.out.println("user="+user);
user = session2.selectOne(statement, 1);
System.out.println("user2="+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="com.atguigu.mybatis.test7.userMapper">
<cache
eviction="FIFO"
flushInterval="60000"
size="512"
readOnly="true"/>
<select id="getUser" parameterType="int" resultType="_User">
select * from users where id=#{id}
</select>
<update id="updateUser" parameterType="_User">
update users set
name=#{name}, age=#{age} where id=#{id}
</update>
</mapper>
10、util包(工具包)
package com.atguigu.day03_mybaits.util;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.atguigu.day03_mybaits.test1.Test;
public class MybatisUtils {
public static SqlSessionFactory getFactory() {
String resource = "conf.xml";
InputStream is = Test.class.getClassLoader().getResourceAsStream(
resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
return factory;
}
}
11、conf.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>
<properties resource="db.properties">
<!--
<property name="username" value="12345"/>
如果配置了这个,将会把properties的内容替换掉
-->
</properties>
<!-- 配置实体类的别名 -->
<typeAliases>
<!-- 下面两者前者是别名,后者是让在xml中省去了包名的写,可直接写入简单类名就行了 -->
<typeAlias type="com.atguigu.day03_mybaits.bean.User" alias="_User"/>
<typeAlias type="com.atguigu.day03_mybaits.bean.Classes" alias="_Classes"/>
<typeAlias type="com.atguigu.day03_mybaits.bean.Teacher" alias="_Teacher"/>
<typeAlias type="com.atguigu.day03_mybaits.bean.Student" alias="_Student"/>
<package name="com.atguigu.day03_mybaits.bean"/>
</typeAliases>
<!--
development : 开发模式
work : 工作模式
-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${name}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/atguigu/day03_mybaits/test1/userMapper.xml"/>
<mapper class="com.atguigu.day03_mybaits.test2.UserMapper"/>
<mapper resource="com/atguigu/day03_mybaits/test3/orderMapper.xml"/>
<mapper resource="com/atguigu/day03_mybaits/test4/ClassMapper.xml"/>
<mapper resource="com/atguigu/day03_mybaits/test5/ClassMapper.xml"/>
<mapper resource="com/atguigu/day03_mybaits/test6/userMapper.xml"/>
<mapper resource="com/atguigu/day03_mybaits/test7/userMapper.xml"/>
</mappers>
</configuration>
12、db.properties配置信息
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybaits
name=lzh
password=123456
13、log4j.xml配置信息
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="debug" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>