文章目录
一、Mybatis简介
mybatis是一个轻量级(轻量级框架不带有侵略性API,对容器也没有依赖性,易于进行配置,易于通用,启动时间较短)的持久化层框架,对JDBC操作进行封装,使开发者本身更多关注于SQL语句的执行效率
mybatis是一个半自动(对象+SQL语句)ORM映射框架,支持一对一、一堆多实现,多对多采用两个一对多实现
二、使用案例
项目结构
1.引入jar包
2.mybatis-config.xml全局配置文件
在src目录下创建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>
<!--设置同名(非必要)-->
<typeAliases>
<package name="model" />
</typeAliases>
<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/abc?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
</configuration>
3.构建模型类和相应的数据库表
模型Blog类代码如下:
package model;
import java.io.Serializable;
/**
* 基本的模型类
*
* @author zYan_g 对象序列化是一个用于将对象状态转换为字节流的 过程,可以将其保存到磁盘文件中或通过网络发送
* 到任何其他程序;从字节流创建对象的相反的过程 称为反序列化。而创建的字节流是与平台无关的,
* 在一个平台上序列化的对象可以在不同的平台上反序列化。
*
*/
public class Blog implements Serializable {
//Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的
// 这里是用来表明版本一致性的
private static final long serialVersionUID = 3802226451645914662L;
private int tid;
private String tname;
private int sid;
public int getTid() {
return tid;
}
public void setTid(int tid) {
this.tid = tid;
}
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
@Override
public String toString() {
return "Blog [tid=" + tid + ", tname=" + tname + ", sid=" + sid + "]";
}
}
模型类代码如图所示:
4.构建持久化层
1.持久化层java代码如下:
package dao;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import model.ABC;
import model.Blog;
/**
*
* @author zYan_g 对Blog类的持久化操作
*/
public interface BlogMapper {
/**
* 根据id查询一个Blog信息
*
* @param id tid
* @return 查到一个Blog类的实体信息
*/
Blog selectBlogById(int id);
/**
* 查询所有Blog信息
*
* @return 查到的所有Blog类的实体信息
*/
List<Blog> selectBlogAll();
// Blog selectBlog(@Param("a")int tid,@Param("b")int sid);
// ABC selectBlog2(@Param("a")int tid,@Param("b")int sid);
/**
* 添加Blog到数据库中
*
* @param b 一个已知的Blog信息
* @return SQL影响的记录的数量
*/
int insert1(Blog b);
/**
* 批量添加
*
* @param item
* @return SQL影响的记录的数量
*/
int insert_list(List item);
/**
* 更新
*
* @param tid
* @param tname
* @param sid
* @return SQL影响的记录的数量
*/
int update1(@Param("a") int tid, @Param("b") String tname, @Param("c") int sid);
/**
* 删除
*
* @param tid
* @return SQL影响的记录的数量
*/
int delete1(@Param("a") int tid);
}
2.dao配置文件BlogMapper.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="dao.BlogMapper">
<resultMap id="a" type="ABC">
<id property="x" column="tid" />
<result property="y" column="tname" />
<result property="z" column="sid" />
</resultMap>
<resultMap id="b" type="Blog">
<id property="tid" column="tid" />
<result property="tname" column="tname" />
<result property="sid" column="sid" />
</resultMap>
<!-- 按已知的tid查询 -->
<select id="selectBlogById" resultType="Blog">
select * from teacher
where tid = #{id}
</select>
<!-- 查询所有 -->
<select id="selectBlogAll" resultMap="b">
select * from teacher
</select>
<!-- <select id="selectBlog" resultType="Blog"> -->
<!-- select * from teacher -->
<!-- where -->
<!-- tid = #{a} and sid=#{b} -->
<!-- </select> -->
<!-- <select id="selectBlog2" resultMap="a"> -->
<!-- select * from teacher -->
<!-- where -->
<!-- tid = #{a} and sid=#{b} -->
<!-- </select> -->
<!-- 插入一个Blog -->
<insert id="insert1" parameterType="Blog"
useGeneratedKeys="true" keyProperty="tid">
insert into teacher(tid, tname,
sid) values(#{tid},#{tname}, #{sid})
</insert>
<!-- 批量插入 -->
<insert id="insert_list" useGeneratedKeys="true"
keyProperty="tid">
insert into teacher(tname,sid) values
<foreach item="item" collection="list" separator=",">
(#{item.tname}, #{item.sid})
</foreach>
</insert>
<!-- 更新 注解@Param接收参数 -->
<update id="update1">
update teacher set
tname = #{b},
sid = #{c}
where tid =
#{a}
</update>
<delete id="delete1">
delete from teacher where tid = #{a}
</delete>
</mapper>
5.将dao配置文件配置到全局配置文件中
加入的位置:mappers标签与上面的environments标签同级
代码如下:
<mappers>
<mapper resource="dao/BlogMapper.xml" />
</mappers>
6.运行
package mybatis00;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
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 dao.BlogMapper;
import model.ABC;
import model.Blog;
public class test0 {
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()) {
BlogMapper mapper = session.getMapper(BlogMapper.class);
// Blog bm = mapper.selectBlogById(1);
// System.out.println(bm.toString());
// List<Blog> list1 = mapper.selectBlogAll();
// for(Blog b:list1) {
// System.out.println(b.toString());
// }
// Blog bm1 = mapper.selectBlog(1, 2);
// System.out.println(bm1.toString());
// ABC bm2 = mapper.selectBlog2(1, 2);
// System.out.println(bm2.toString());
// Blog bt = new Blog("ttt", 2);
// int a = mapper.insert1(bt);
// System.out.println(bt.getTid());
// System.out.println(a);
// List<Blog> a = new ArrayList<>();
// for(int i=50;i<60;i++) {
// String tname = "aa"+i;
// Blog bt = new Blog(tname, i);
// a.add(bt);
// }
// int b = mapper.insert_list(a);
// System.out.println(b);
// int b = mapper.update1(50, "ddd", 33);
// System.out.println(b);
int b = mapper.delete1(69);
System.out.println(b);
// 提交事务
session.commit();
// 关闭 session
session.close();
}
}
}
7.结果
1.query
2.insert
3.update
执行前
执行后
4.delete