一、Mybatis是什么
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
二、Mybatis的作用
Mybatis是一个持久层框架,当然作用就是操作数据库的(增删改查)。Mybatis的理念:让开发者是10%的代码就可以实现数据库的操作。
解决方案: 持久层(DAO)的零实现. 所谓的零实现,就是不用写实现类代码,直接使用接口就可以操作数据库.可以自动将数据封装到对象里面不需要手工编写映射的关系
Mybatis的定义,提高开发的效率!写很少代码就可以实现增删改查。
三、Mybatis配置流程图
四、配置流程说明
获得数据库连接
第一步:导入包(任何框架需要的事情)
第二步:创建总配置文件,文件名随便写 mybatis-config.xml 配置数据源
注:具体配置参考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 default="dev_mysql">
<environment id="dev_mysql">
<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="admin"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="xxx.xml"/>
</mappers>
</configuration>
第三步:创建一个MybatisUtils工具类,(获得操作对象)
MyBatisUtil工具类的作用主要用于 读取配置文件,创建工厂对象,提供创建SqlSession数据库操作对象的方法
package cn.ss.mybatis.util;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
private MyBatisUtil() {
}
//SqlSessionFactory 会话工厂对象
private static SqlSessionFactory factory;
//类加载到JVM中就立马执行static代码块,并且只会执行一次
static {
//资源文件
String resource = "mybatis-config.xml";
//try(){}catch(Exception e){} try的圆括号内部能够自动释放/关闭资源
try(InputStream inputStream = Resources.getResourceAsStream(resource)) {
//创建SqlSessionFactory 对象
factory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 创建SqlSession对象
* @return SqlSession对
*/
public static SqlSession openSession() {
//创建Session对象
SqlSession session = factory.openSession();
return session;
}
}
--需求:插入数据到数据库
第四步:创建一个映射接口 (mapper)
package cn.zj.mybatis.mapper;
import cn.zj.mybatis.pojo.User;
/*
* 使用MyBatis的动态代理开发编写代码遵循四个原则
* 1.映射文件的namespace命名空间的值必须是对应接口的全限定名
2.映射文件的对应功能 id值必须等于映射接口中方法的名称
3.映射文件的参数类型必须和接口中方法的参数类型一致
4.映射文件查询的返回结果类型必须和接口的方法的返回数据类型一致,
DML操作返回的受影响的行数,除外
*/
public interface UserMapper {
int insertUserInfo(User u);
}
第五步:创建一个映射文件
<?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="cn.ss.mybatis.pojo.UserMapper">
<!-- 新增操作
id: 当前功能的唯一标识,和接口方法同名
parameterType : 参数的类型
useGeneratedKeys:是否返回数据库生成的主键 true是/false否
keyProperty : 数据库主键对应java的pojo对象的属性
keyColumn : 数据表的主键列明
-->
<insert id="insertUserInfo" parameterType="User"
useGeneratedKeys="true"
keyProperty="id"
keyColumn="id"
></mapper>
第六步:在总配置文件加载映射文件。
第七步:编写测试插入数据代码
五、MyBatis的注解开发
MyBatis的映射配置除了使用xml配置以外,还支持注解配置sql语句
MyBatis提供了下面注解进行映射文件配置
//示例
public interface UserMapper {
@Select("select id u_id,name u_name,password u_password,age u_age from user where id = #{id}")
@Results({
@Result(id=true,property="id",column="u_id"),
@Result(property="name",column="u_name"),
@Result(property="password",column="u_password"),
@Result(property="age",column="u_age")
})
User selectByPrimaryKey(Integer id);
@Select("select * from user")
List<User> findAll();
@Insert("insert into user (name,password,age)values(#{name},#{password},#{age})")
@Options(keyProperty="id",useGeneratedKeys=true)
int insertUserInfo(User user);
@Delete("delete from user where id = #{id}")
int deleteByUserId(Integer id);
@Update("update user set name = #{name} ,password = #{password},age = #{age} where id = #{id}")
int updateUserInfoById(User user);
}
注解映射的配置:
<mappers>
<!-- 接口映射权限定名 -->
<mapper class="cn.zj.mybatis.mapper.UserMapper"/>
</mappers>