MyBatis入门
1. 导入jar包
最新版的Jar包为:
mybatis-3.5.1.jar
另外数据库的驱动包 也需导入
2. 准备配置文件
2.1 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">
<!-- "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,
environments?,databaseIdProvider?,mappers?)"-->
<configuration>
//这里指定了一个资源文件,里面保存有连接数据库的相关数据
<properties resource="dbconfig.properties">
</properties>
//这里指定了log4j,将会在控制台打印出sql语句等相关信息
<settings>
<setting name="logImpl" value="log4j"/>
</settings>
//别名的用法
<typeAliases>
<!--
<typeAlias type="com.wanmait.demo.pojo.QuestionType" alias="QuestionType"/>
-->
<!--该包下面的所有类的别名都是简单的类名-->
<package name="com.wanmait.demo.pojo"/>
</typeAliases>
//别名的用法结束
<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="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!--注册映射文件-->
<mappers>
<mapper resource="mapping/QuestionTypeMapper.xml"/>
</mappers>
</configuration>
dbconfig.properties
driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://127.0.0.1:3306/FangZuZu?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
user = root
password = *********
log4j.properties
log4j.rootLogger=OFF,stdout,logfile //OFF,打印OFF层级及以上的信息,如警告异常严重等信息,全部打印为DEBUG,他的层级最低
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=D:/mybatis.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n
###show mybatis 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
2.2 工具类(工厂类)
package com.wanmait.demo.util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
public class SqlSessionFactoryUtil {
private static SqlSessionFactory factory;
//静态块
static {
try {
//从MyBatis.xml中读取配置信息
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getFactory() {
return factory;
}
}
2.3 映射文件
<?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.wanmait.demo.mapper.QuestionTypeMapper">
//数据库的查
<select id="findById" parameterType="java.lang.Integer"
resultType="com.wanmait.demo.pojo.QuestionType">
select id,title,questionCount,sort,enable from question_type where enable=1 and id=#{id}
</select>
<select id="findAll" resultType="com.wanmait.demo.pojo.QuestionType">
select * from question_type where enable=1
</select>
//增
<insert id="insert" parameterType="com.wanmait.demo.pojo.QuestionType">
insert into question_type(title,sort) values (#{title},#{sort})
</insert>
//改
<update id="update" parameterType="com.wanmait.demo.pojo.QuestionType">
update question_type set title=#{title},sort=#{sort} where id=#{id}
</update>
//删
<delete id="delete" parameterType="java.lang.Integer">
update question_type set enable=0 where id=#{id}
</delete>
</mapper>
2.4 命名空间指向的接口
package com.wanmait.demo.mapper;
import com.wanmait.demo.pojo.QuestionType;
import java.util.List;
public interface QuestionTypeMapper {
QuestionType findById(Integer id);
List<QuestionType> findAll();
void insert(QuestionType questionType);
void update(QuestionType questionType);
void delete(Integer id);
}
2.5 Service类(代替了MVC的DAO)
package com.wanmait.demo.service;
import com.wanmait.demo.mapper.QuestionTypeMapper;
import com.wanmait.demo.pojo.QuestionType;
import com.wanmait.demo.util.SqlSessionFactoryUtil;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
public class QuestionTypeService {
private QuestionTypeService(){}
private static QuestionTypeService service = new QuestionTypeService();
public static QuestionTypeService getService()
{
return service;
}
public List<QuestionType> findAll()
{
List<QuestionType> questionTypes = null;
SqlSession session = SqlSessionFactoryUtil.getFactory().openSession();
//接口与映射文件相连接对应
QuestionTypeMapper questionTypeMapper = session.getMapper(QuestionTypeMapper.class);
questionTypes = questionTypeMapper.findAll();
//关闭
session.close();
return questionTypes;
}
public void insert(QuestionType questionType)
{
SqlSession session = SqlSessionFactoryUtil.getFactory().openSession();
QuestionTypeMapper questionTypeMapper = session.getMapper(QuestionTypeMapper.class);
questionTypeMapper.insert(questionType);
//事务提交,除了数据库的查操作,增.删.改都需要提交以下
session.commit();
session.close();
}
}