目录
一、描述
1、准备工作
(1)环境配置——相互作用
a.其中mybatis-config.xml(配置数据源和mapper.xml实体类的地方)这个是核心的文件,他申明了每个mapper.xml文件的位置(我的理解是这个就是把一个类的实例化对象交给mybatis管理)。
b.他能把db.properties(它是配置数据库信息得。如:username,password。官方语言称为:数据源)这种类似的文件集成起来。
c.log4j.properties日志记录,作用:就是把信息输出到控制台。
(2)导入jar包
(3)项目目录结构
2、总体思路
a.通过下载MyBatis框架,把jar包导入。编写MyBatis的配置文件,名称为:mybatis-config.xml,目前我学到的作用(配置数据库,配置XML的路径。)
b.这次学习主要是引入了:动态SQL,它是写在XXXmapper.xml里面的,他的一个重要的属性就是test,这个属性可以进行非空判断,如果传入参数,那么就会根据你写的动态SQL语句执行。
3、我出现的问题
a.开始的时候我配置环境的时候出现很大问题,一直报错。解决办法:一个模块一个模块的试。把以前成功的地方移植过来,找出错误的地方。最后发现是配置mapper.xml的扫描方式配置成了包扫描,百度出来的结果是,XML不支持这种扫描模式。基于注解的方法才能配置包扫描。我也没去深究。
二、步骤
1、根据项目结构建包,建类。
a.实体类:Customer
package com.stx.po;
public class Customer {
private Integer id;//主键
private String username;//客户名称
private String jobs;//职业
private String phone;//电话
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getJobs() {
return jobs;
}
public void setJobs(String jobs) {
this.jobs = jobs;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "Customer{" +
"id=" + id +
", username='" + username + '\'' +
", jobs='" + jobs + '\'' +
", phone='" + phone + '\'' +
'}';
}
}
b.CustomerMapper.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">
<!--!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"
1、这一段是MyBatis的约束配置。
-->
<!--2、以下是映射信息-->
<!--
动态SQL的元素。如果写了动态SQL传递了参数就会进行判断。否则就会只执行SQL语句,不会执行动态SQL。
-->
<mapper namespace="com.stx.mapper.CustomerMapper">
<select id="findCustomerByNameAndJobs" parameterType="com.stx.po.Customer" resultType="com.stx.po.Customer">
select * from t_customer where 1=1
<if test="username !=null and username !=''" >
and username like concat('%',#{username},'%')
</if>
<if test="jobs !=null and jobs!=''">
and jobs= #{jobs}
</if>
</select>
</mapper>
c。测试类MyBatisTest
package com.stx.test;
import com.stx.po.Customer;
import com.stx.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class MyBatisTest {
/*
* 根据客户姓名和职业组合条件查询客户信息表
* */
@Test
public void findCustomerByIdTest() throws Exception{
SqlSession sqlSession = MybatisUtils.getSession();
Customer customer = new Customer();
customer.setUsername("jack");
customer.setJobs("teacher");
List<Customer> customers = sqlSession.selectList("com.stx.mapper.CustomerMapper.findCustomerByNameAndJobs",customer);
for (Customer customer1 : customers){
System.out.println(customer1);
}
// 关闭SqlSession
sqlSession.close();
}
}
d。工具类:MybatisUtils
package com.stx.utils;
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 java.io.Reader;
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory =null;
// 初始化SqlSessionFactory对象
static {
try {
// 使用MyBatis提供的Resources类加载MyBatis是配置文件
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
// 构建SqlSessionFactory工厂
sqlSessionFactory =new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
//获取SqlSession对象的静态方法。
public static SqlSession getSession() {
return sqlSessionFactory.openSession();
}
}
2、外部引入文件
1、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>
<!-- <!– 3.外部引入方法–>-->
<properties resource="db.properties"></properties>
<!-- 1.配置环境,默认的环境id为mysql-->
<environments default="mysql">
<!-- 1.2.配置id为mysql的数据库环境-->
<environment id="mysql">
<!-- 使用JDBC的事务管理器。-->
<transactionManager type="JDBC"></transactionManager>
<!-- 数据库连接池-->
<!-- <dataSource type="POOLED">-->
<!-- <property name="driver" value="com.mysql.jdbc.Driver"/>-->
<!-- <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>-->
<!-- <property name="username" value="root"/>-->
<!-- <property name="password" value="123456"/>-->
<!-- </dataSource>-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 2.配置Mapper的位置。-->
<mappers>
<mapper resource="com/stx/mapper/CustomerMapper.xml"></mapper>
</mappers>
</configuration>
2、db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456
3、log4j.properties
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.stx=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
#这个日志文件的主要目的是为了在:控制台输出Sql语句。作用是:输出日志信息。
三、实例
1、区别