一、mybatis概述:
0、MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,由谷歌托管,并且改名为MyBatis 。2013年11月迁移到Github。
1、iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
3、MyBatis作为持久层框架,其主要思想是将程序中的大量sql语句剥离出来,配置在配置文件中,实现sql的灵活配置。这样做的好处是将sql与程序代码分离,可以在不修改程序代码的情况下,直接在配置文件中修改sql。
二、应用步骤:
1、添加jar包
【mybatis】
mybatis-3.1.1.jar 下载地址:点击打开链接
【Mysql驱动包】
mysql-connector-java-5.1.7-bin.jar 下载地址:点击打开链接
(相关资源我已上传,如有需要自行下载)
2、建库、建表
create database mybatis;
use mybatis;
CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);
INSERT INTO users(NAME, age) VALUES('Tom', 12);
INSERT INTO users(NAME, age) VALUES('Jack', 11);
3、工程目录
4、添加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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<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="root" />
</dataSource>
</environment>
</environments>
</configuration>
5、定义表对应的实体类
public class User {
private int id;
private String name;
private int age;
//get,set方法
}
6、定义操作users表的sql映射文件userMapper.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.rjxy.mybatis_test.test1.userMapper">
<select id="getUser" parameterType="int"
resultType="com.rjxy.mybatis_test.test1.User">
select * from users where id=#{id}
</select>
</mapper>
7、在conf.xml文件中注册userMapper.xml文件
<mappers>
<mapper resource="com/rjxy/mybatis_test/test1/userMapper.xml"/>
</mappers>
8、编写测试代码,执行定义好的select语句
public class Test {
public static void main(String[] args) throws IOException {
String resource = "conf.xml";
//加载mybatis的配置文件(它也加载关联的映射文件)
Reader reader = Resources.getResourceAsReader(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建能执行映射文件中sql的sqlSession
SqlSession session = sessionFactory.openSession();
//映射sql的标识字符串
String statement = "com.rjxy.mybatis.bean.userMapper"+".selectUser";
//执行查询返回一个唯一user对象的sql
User user = session.selectOne(statement, 1);
System.out.println(user);
}
}
9、操作User表的CRUD(增查改删),在UserMapper中添加
<insert id="insertUser" parameterType="com.rjxy.ibatis.bean.User">
insert into users(name, age) values(#{name}, #{age});
</insert>
<delete id="deleteUser" parameterType="int">
delete from users where id=#{id}
</delete>
<update id="updateUser" parameterType="com.rjxy.ibatis.bean.User">
update users set name=#{name},age=#{age} where id=#{id}
</update>
<select id="selectUser" parameterType="int" resultType="com.rjxy.ibatis.bean.User">
select * from users where id=#{id}
</select>
<select id="selectAllUsers" resultType="com.rjxy.ibatis.bean.User">
select * from users
</select>
----- 注意-----------注意-----------注意-----------注意-----------注意-----------注意-----------注意-----------注意-----------注意-----------注意-----------注意------
注意:当执行CRUD操作时,insert、delete、update都执行正常,但是,select查不到数据,原因是实体类中没有提供无参构造函数。没有提供任何构造函数时,系统会提供一个默认的无参构造函数,但是,当提供了有参构造函数时,系统就不会提供,需要显式的定义。
10、运行发现数据库只能查询数据,但是增删改测试时没有报错,数据库却没有变化,原因是默认是手动添加的,需要修改。
session.commit();//将操作提交
或者
SqlSession session = sqlSessionFactory。openSession(true);//将默认改为自动提交
11、session用完之后应该关闭
session.close();