绪论
本篇延续上篇,进一步对mybatis学习,本篇主要讲述mybatis的分层及封装
目录
一、 config配置文件
1.1 日志配置,需要导入jar包
log4j.properties
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
#### 1.2 mybatis
1.2 mybatis.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">
<!-- 核心配置对象
mybatis的核心配置文件主要配置数据源,数据库相关的配置 -->
<configuration>
<!-- 加载jdbc.properties文件 -->
<properties resource="jdbc.properties"></properties>
<typeAliases>
<!-- 对下列包下所有的类重命名 -->
<package name="com.zk.mybatis.model"/>
<package name="com.zk.mybatis.view"/>
</typeAliases>
<!-- 配置将来访问的数据源,数据环境
数据源是可以配置多个的,默认使用开发者模式来连接数据库 -->
<environments default="development">
<environment id="development">
<!-- 事务管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 数据源 -->
<!-- 具体的数据源 使用数据库连接池,来获取jdbc连接,获取数据库连接需要设置
驱动名称、数据库地址、数据库用户名、密码 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.DriverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 将mapper.xml(PersonDao.xml)导入 -->
<mappers>
<package name="com.zk.mybatis.dao"/>
</mappers>
</configuration>
二、MySQL数据库
jdbc.properties
jdbc.DriverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/person?useUnicode=true&characterEncoding=utf8
jdbc.username=#
jdbc.password=#
三、 分层代码
3.0 util 工具类
MybatisUtil.java
public class MybatisUtil {
private static SqlSessionFactory factory;
static {
InputStream in;
try {
in = Resources.getResourceAsStream("mybatis.xml");
factory = new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static SqlSessionFactory getFactory() {
return factory;
}
}
3.1 Model
Person实体类:
package com.zk.mybatis.model;
public class Person {
private int id;
private String name;
private String age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
3.2 dao
PersonDao.java dao接口
只定义了一个按年龄区间查找的方法
public interface PersonDao {
public List<Person> findByVo(PersonVo vo);
}
PersonDao.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.zk.mybatis.dao.PersonDao">
<resultMap type="Person" id="baseResult">
<id column="p_id" property="id"/>
<result column="p_name" property="name"/>
<result column="p_age" property="age"/>
</resultMap>
<select id="findByVo" parameterType="PersonVo" resultMap="baseResult">
select *from person where 1=1
<!-- sql拼接,>(>) <(<) -->
<if test="minAge!=null and minAge!='' ">
and p_age >=${minAge}
</if>
<if test="maxAge!=null and minAge!=''">
and p_Age <=${maxAge}
</if>
</select>
</mapper>
3.3 service层
PersonService.java 接口
public interface PersonService {
public List<Person> findByVo(PersonVo vo);
}
PersonServiceImpl 接口实现类
public class PersonServiceImpl implements PersonService {
@Override
public List<Person> findByVo(PersonVo vo) {
SqlSession session = MybatisUtil.getFactory().openSession();
PersonDao personDao = session.getMapper(PersonDao.class);
return personDao.findByVo(vo);
}
}
3.4 视图层(模拟传输数据)
PersonVo.java
/**
* 本类的作用主要为了模拟view层,对编号在minId-maxId区间的Person进行查找
* @author 19352
*/
public class PersonVo {
private String minAge;
private String maxAge;
public String getMinAge() {
return minAge;
}
public void setMinAge(String minAge) {
this.minAge = minAge;
}
public String getMaxAge() {
return maxAge;
}
public void setMaxAge(String maxAge) {
this.maxAge = maxAge;
}
}
3.5 控制层(用于测试)
PersonServlet .java
public class PersonServlet {
private PersonService personService = new PersonServiceImpl();
@Test
public void testFindByVo() {
PersonVo vo = new PersonVo();
vo.setMinAge("18");
vo.setMaxAge("20");
System.out.println(personService.findByVo(vo));
}
}
控制台输出: