一、需要准备的jar包和配置文件
Log4J的jar包
mybatis3.2.2的jar包
Mysql数据库的连接jar包
Log4J的配置文件—>转自网上
#DEBUG < INFO < WARN < ERROR < FATAL
### set log levels ###
log4j.rootLogger=debug, stdout
### 输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n
### show sql ###
log4j.logger.com.ibatis=debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug
log4j.logger.dao=debug
log4j.logger.dao=debug—->.dao 是你存放 mybatis 映射文件的包
数据库连接配置文件: database.properties—->因人而已
driver=com.mysql.jdbc.Driver
address=jdbc:mysql://localhost:3306/nga?useUnicode=true&characterEncoding=utf8&useSSL=true
user=root
password=556556
二、Mybatis配置文件— mybatis-config.xml 和 (实体类)Mapper.xml
mybatis-config.xml ——->核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" >
<configuration>
<!-- 引入数据库连接配置文件 database.properties -->
<properties resource="database.properties"></properties>
<!-- 配置log4J -->
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
<!-- 配置连接运行环境 可以配置多个但只能使用 id 对应的运行环境-->
<environments default="development">
<environment id="development">
<!-- 配置事务管理,采用JDBC的事务管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${address}" />
<property name="username" value="${user}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!-- 将mapper文件加入到配置文件中 resource路径填写需注意-->
<!-- 一个mapper文件 对应一个实体类的sql语句映射-->
<!-- 如有多个可以继续添加相应的 mapper文件-->
<mappers >
<mapper resource="userDao/UserMapper.xml" />
</mappers>
</configuration>
userMapper.xml ——->实体类的 sql 语句 映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" >
<!-- mapper文件的命名填写src下的包名到实体类的mapper文件 -->
<!-- 之间用 点号 隔开 -->
<!-- 保证不同的mapper文件不会重名 -->
<mapper namespace="userDao.UserMapper">
<!-- sql语句的id命名 mapper文件内的唯一限定名 -->
<select id="countUser" resultType="int">
select count(*) from user
</select>
<!-- parameterType 入参类型如果是实体类的话 填写必须是src下 包名到实体类 用点号隔开 -->
<!-- 查询结果有很多实体类 是一个集合 resultType=====>指的是一个结果的类型 -->
<select id="selectUserLike" resultType="entity.User" parameterType="entity.User">
select * from user where 1=1
<if test="loginName!=null and loginName!=''">
and loginName like concat('%',#{loginName},'%')
</if>
<if test="userId!=null">
<!-- CDATA节中的内容不会做特殊处理 -->
<!-- and userid<#{age} -->
<![CDATA[and userid<#{userId}]]>
</if>
</select>
</mapper>
三、 以接口的形式 查询数据库
在对应的实体类的包下新建:
1)接口 : UserMapper.jva
2)实现类 : UserMapperImpl.java
3)工具类 : MybatisUtil.java
1、接口 : UserMapper.jva中的内容:
对应之前的 userMapper.xml文件 新建和sql映射 id 相同的抽象方法
// 接口的方式查询数据
1)Mapper文件的命名( namespace)必须为 接口的完全限定名
2) 接口中的方法名 必须于 sql语句的 id 名称相同
public interface UserMapper {
/**
*查询用户条数
*
*/
public int countUser();
/**
*模糊查询 loginName like
* userId<? 的用户
*/
public List<User> selectUserLike(User user);
}
2、工具类 : MybatisUtil.java中的内容:
public class MybatisUtil {
static SqlSessionFactory factory;
// SqlSessionFactory 是单利模式
//所以 我们只需要一个SqlSessionFactory
//用静态代码块的形式 保证只获取一个SqlSessionFactory
static {
try {
// 把mybatis核心配置文件读成输入流
InputStream input = Resources.getResourceAsStream("mybatis-config.xml");
// 创建session工厂-----SqlSessionFactoryBuilder() 用过即丢
factory = new SqlSessionFactoryBuilder().build(input);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获得 sqlSession
* @return
*/
public static SqlSession getSqlSession() {
// 由工厂产生session----> factory.openSession.(true)是开启自动提交
// 手动提交 session.commit();
return factory.openSession(true);
}
/**
* 关闭 传入的sqlSession
* @param sqlSession
*/
public static void closeSqlSession(SqlSession sqlSession){
sqlSession.close();
}
}
3、实现类 :UserMapperImpl.java中的内容:
public class UserMapperImpl implements UserMapper {
public int countUser() {
// 获得SqlSession 对象--->利用工具类获取
SqlSession sqlSession = MybatisUtil.getSqlSession();
// 获得接口的实例---->sqlSession.getMapper()获取
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 调用接口的方法
int count = mapper.countUser();
//关闭此次会话
MybatisUtil.closeSqlSession(sqlSession);
return count;
}
/**
* 根据 姓名模糊查询用户 并且 userid<?
* 对应Mapper文件sql语句映射的返回类型是一个实体resultType="entity.User"--->指的是一个结果的类型
* 抽象方法返回的是 User实体类的集合
*/
@Override
public List<User> selectUserLike(User user) {
// 获得SqlSession 对象
SqlSession sqlSession = MybatisUtil.getSqlSession();
// 使用sqlSession.getMapper()方法 自动获得接口的实例
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 调用接口的方法
List<User> list1 = mapper.selectUserLike(user);
MybatisUtil.closeSqlSession(sqlSession);
return list1;
}
}
这样配置结束后, 测试类就可以新建接口的实现类的实例,调用方法进行数据库的访问
需注意的地方:
1)、Mapper文件的命名—->对应的接口的完全限定名
2)、Mapper文件中sql语句映射的id命名—->对应的接口的方法名—>完全相同
3)、sql语句映射的parameterType=”entity.User”入参—->对应的接口的入参