1. Mybatis的介绍
1.1 什么是Mybatis?
Mybatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
1.2 特点:
Mybatis是支持普通SQL查询,存储过程和高级映射的持久层框架。对JDBC的操作数据库过程进行封装,可使用简单的xml或注解用于配置和原始映射,将接口和Java的pojo映射成数据库中的记录。
2.Mybatis入门
2.1 mybatis的架构图
2.2 mybatis配置并实现对数据库的CRUD步骤
前提:
mybatis下载 网址: https://github.com/mybatis/mybatis-3/releases
mybatis-3.2.7.jar mybatis的核心包
lib文件夹 mybatis的依赖包所在
mybatis-3.2.7.pdf mybatis使用手册
下载数据库驱动包: mysql-connector-java-5.1.40-bin.jar
加入mybatis核心包、依赖包、数据驱动包。
(1). config.xml文件: src下面
作为mybatis的全局配置文件,配置了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>
<properties resource="com/mapper/db.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<!--分别是数据库的jdbc:mysql://ip:port/数据库-->
<property name="url" value="${jdbc.url}"/>
<!--账号密码-->
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 每一个mapper.xml都需要 -->
<mappers>
<mapper resource="com/mapper/mapper.xml"/>
</mappers>
</configuration>
(2). db.properties: com.mapper包
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:6603/ssm_test
jdbc.username=root
jdbc.password=123456
jdbc.maxActive = 100
jdbc.maxIdle =5
jdbc.minIdle=1
jdbc.initialSize =30
jdbc.maxWait =3000
mapper.xml: com.mapper包
sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在config.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">
<!--- 命名空间 namespace -->
<mapper namespace="mapper">
<select id="selectUserById" parameterType="int" resultType="com.entity.TestUser" >
select * from mybatis where id=#{id};
</select>
<select id="selectAllUser" parameterType="int" resultType="com.entity.TestUser" >
select * from mybatis;
</select>
<update id="updateAllUser" parameterType="com.entity.TestUser">
update mybatis set username = #{username}, age = #{age};
</update>
<update id="updateUserById" parameterType="com.entity.TestUser">
update mybatis set username = #{username},age = #{age} where id = #{id};
</update>
<insert id="insertUser" parameterType="com.entity.TestUser">
insert into mybatis(id,username,age) values(#{id}, #{username}, #{age});
</insert>
<delete id="deleteUser" parameterType="com.entity.TestUser" >
delete from mybatis where id = #{id};
</delete>
</mapper>
(3).配置实体类 TestUser
package com.entity;
public class TestUser {
private int id;
private String username;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public TestUser(int id, String username, int age) {
super();
this.id = id;
this.username = username;
this.age = age;
}
public TestUser() {
super();
// TODO Auto-generated constructor stub
}
}
(4).Test1.java
通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂;
由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
package com.test;
import java.io.IOException;
import java.io.InputStream;
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.entity.TestUser;
public class Test1 {
public static void main(String[] args) {
Test1 test1 = new Test1();
test1.TestInsert();
}
public void TestInsert(){
SqlSession sqlsession = Test1.getSqlSession();
TestUser testUser = new TestUser();
testUser.setId(2);
testUser.setUsername("xiaoli");
testUser.setAge(18);
int result = sqlsession.insert("mapper.insertUser",testUser);
System.out.println("新增:"+result);
}
public void TestSelect() {
SqlSession sqlsession = Test1.getSqlSession();
List<TestUser> list = sqlsession.selectList("mapper.selectUserById", 1);
for (int i = 0; i < list.size(); i++) {
System.out.println("用户名:"+list.get(i).getUsername());
}
}
public void TestDel() {
SqlSession sqlsession = Test1.getSqlSession();
int del = sqlsession.delete("mapper.deleteUser", 1);
System.out.println("删除:"+del);
}
public void TestUpdate() {
TestUser testUser = new TestUser();
SqlSession sqlsession = Test1.getSqlSession();
testUser.setId(1);
testUser.setAge(28);
testUser.setUsername("xiaohua");
int upd = sqlsession.update("mapper.updateUserById",testUser);
System.out.println("修改:"+upd);
}
public void TestUpdateAll() {
TestUser testUser = new TestUser();
SqlSession sqlsession = Test1.getSqlSession();
testUser.setId(1);
testUser.setAge(8);
testUser.setUsername("xiaoxiao");
int upd = sqlsession.update("mapper.updateAllUser",testUser);
System.out.println("修改全部:"+upd);
}
public static SqlSession getSqlSession(){
String resource = "config.xml";
SqlSession session = null;
try {
InputStream iStream = Resources.getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(iStream);
session = factory.openSession(true); //true:自动提交 ; false:手动提交
} catch (IOException e) {
e.printStackTrace();
}
return session;
}
}
(4).TestServlet .java 用于和前端页面交互
package com.test;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
Test1 test1 = new Test1();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String flag = request.getParameter("flag").toString();
flag = (String) CEncoding(flag);
System.out.println("调用标志:"+flag);
if(flag.equals("1")){
getAllUser();
}else if(flag.equals("2")){
String bianhao = request.getParameter("number").toString();
Integer number = Integer.parseInt((String) CEncoding(bianhao));
getUserById(number);
}else if(flag.equals("3")){
String bianhao = request.getParameter("number").toString();
Integer number = Integer.parseInt((String) CEncoding(bianhao));
String name = request.getParameter("name").toString();
name = (String) CEncoding(name);
String hobby = request.getParameter("hobby").toString();
hobby = (String) CEncoding(hobby);
Insert(number,name,hobby);
}else if(flag.equals("4")){
String bianhao = request.getParameter("number").toString();
Integer number = Integer.parseInt((String) CEncoding(bianhao));
String name = request.getParameter("name").toString();
name = (String) CEncoding(name);
String hobby = request.getParameter("hobby").toString();
hobby = (String) CEncoding(hobby);
Update(number,name,hobby);
}else if(flag.equals("5")){
String bianhao = request.getParameter("number").toString();
Integer number = Integer.parseInt((String) CEncoding(bianhao));
delete(number);
}
}
//查询全部数据
public void getAllUser(){
List<Object> list = test1.SelectAllUser();
System.out.println("list:"+list);
}
//查询单个数据
public void getUserById(int flag){
List<Object> list = test1.SelectUserById(flag);
System.out.println("list:"+list);
}
//插入数据
public void Insert(int number,String param1,String param2){
Integer result = test1.TestInsert(number, param1, param2);
System.out.println(result);
}
//修改数据
public void Update(int number,String param1,String param2){
Integer result = test1.TestUpdate(number, param1, param2);
System.out.println(result);
}
//删除数据
public void delete(int number){
Integer result = test1.TestDelete(number);
System.out.println(result);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
//UTF-8编码
public Object CEncoding(String param){
try {
param = new String(param.getBytes("ISO8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return param;
}
public TestServlet() {
super();
}
}
JSP:Test.jsp
<form action="TestServlet">
<input type="text" name="flag" value="" placeholder="请输入标志">
<input type="text" name="number" value="" placeholder="请输入编号">
<input type="text" name="name" value="" placeholder="请输入姓名">
<input type="text" name="hobby" value="" placeholder="请输入喜好">
<input type="submit" value="提交2">
</form>
(6).小结:
6.1 测试程序步骤:
a. 创建SqlSessionFactoryBuilder对象
b. 加载SqlMapConfig.xml配置文件
c. 创建SqlSessionFactory对象
d. 创建SqlSession对象
e. 执行SqlSession对象执行查询,获取结果User
f. 打印结果
g. 释放资源