一、Mybatis简介
Mybatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
二、简单配置使用示例
1.Mybatis可应用于普通JAVA项目或JAVAWeb项目中,此处我建立的是一个JAVAWeb项目,目录结构如下:
2.导入相应的jar包
一个是mybatis的包,如:mybatis-3.4.6.jar;一个是数据库的包,如:mysql-connector-java-5.1.37.jar
3.配置Mybatis的配置文件,如:
<?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:信息配置的是连接数据库的(数据源的)一些参数,如用户名,密码等,MyBatis数据库操作的session就是根据这些信息初始化的-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 数据源配置 -->
<dataSource type="POOLED">
<!-- 数据库驱动 -->
<property name="driver" value="com.mysql.jdbc.Driver" />
<!-- 数据库连接URL -->
<property name="url" value="jdbc:mysql://localhost:3306/mybatisstudy?useUnicode=true&characterEncoding=utf8"/>
<!-- 数据库用户名和密码 -->
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
<!-- mappers:配置的是一个个Mapper文件,这些文件来约束数据库的信息(Relationship) 和 对象(Object)的信息映射(Mapper);它负责完成对象和数据库表的映射,是ORM最具体的配置-->
<mappers>
<!-- 配置实体映射文件 -->
<mapper resource="com/mybatisstudy/mapper/userMap.xml" />
</mappers>
</configuration>
4.建表,如:
5.编写用于测试的实体类,如:
package com.mybatisstudy.model;
public class User {
private int id;
private String name;
private String sex;
private int age;
public User() {
super();
}
public User(String name, String sex, int age) {
super();
this.name = name;
this.sex = sex;
this.age = age;
}
public User(int id, String name, String sex, int age) {
super();
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "[id:" + id + ",name:" + name + ",sex:" + sex + ",age:" + age + "]";
}
}
6.编写该实体类的映射文件,注意需要在Mybatis的配置文件中引用该文件,如:
<?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.mybatisstudy.mapper.userMap">
<select id="selectAllUser"
resultType="com.mybatisstudy.model.User">
SELECT * FROM user ;
</select>
<select id="selectUserById" parameterType="int"
resultType="com.mybatisstudy.model.User">
SELECT * FROM user where id = #{id} ;
</select>
<insert id="addUser" parameterType="com.mybatisstudy.model.User">
INSERT INTO user(id,name,sex,age) VALUES(#{id},#{name},#{sex},#{age});
</insert>
<delete id="deleteUserById" parameterType="com.mybatisstudy.model.User">
DELETE FROM user WHERE id=#{id};
</delete>
<update id="updateUserById" parameterType="com.mybatisstudy.model.User">
UPDATE user SET age=#{age} ,name=#{name} WHERE id=#{id}
</update>
</mapper>
7.测试,如:
其中加载Mybatis的配置文件的方式主要有三种,第一种是通过类加载器来加载;第二种是采用文件读取的方式来加载;第三种是使用Mybatis提供的Resources类来进行加载。
注意:对于涉及到增删改数据时,需要手动进行提交(session.commit())。
package com.mybatisstudy.test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.List;
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 com.mybatisstudy.model.User;
public class Test {
public static void main(String[] args) {
// mybatis的配置文件
String resource = "mybatisconf.xml";
InputStream inputStream = null;
// 方式一:使用类加载器加载mybatis的配置文件
// inputStream = Test.class.getClassLoader().getResourceAsStream(resource);
// 方式二:采用文件读取的方式,读取配置文件
/*File file = new File("src/mybatisconf.xml");
Reader reader = null;
try {
reader = new FileReader(file);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);*/
// 方式三:使用MyBatis提供的Resouces类加载mybatis的配置文件
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 构建SqlSessionFacoty工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建session对象,并使用它来进行数据库的各项 操作
SqlSession session = sqlSessionFactory.openSession();
// 根据Id查询用户
String statement = "com.mybatisstudy.mapper.userMap.selectUserById";
User user = session.selectOne(statement, 1001);
System.out.println(user);
// 查询所有的用户
String statement2 = "com.mybatisstudy.mapper.userMap.selectAllUser";
List<User> users = session.selectList(statement2);
System.out.println(users);
// 添加用户信息
User user2 = new User(1003, "小杰", "男", 20);
String statement3 = "com.mybatisstudy.mapper.userMap.addUser";
int line = session.insert(statement3, user2);
// 对于增删改,需要手动提交事务,才能将数据持久化,才能避免出现脏数据
session.commit();
// 修改用户信息
User user3 = new User(1003, "小明", "男", 21);
String statement4 = "com.mybatisstudy.mapper.userMap.updateUserById";
int line2 = session.update(statement4, user3);
session.commit();
// 删除用户信息
String statement5 = "com.mybatisstudy.mapper.userMap.deleteUserById";
int line3 = session.delete(statement5, 1003);
session.commit();
session.close();
}
}
8.结果: