官网 :https://mybatis.net.cn/getting-started.html
MyBatis 是一款优秀的持久层框架,
它支持自定义 SQL、存储过程以及高级映射。
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
<dependencies>
<!--mysql驱动依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--mybatis原生依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!--junit单元测试依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
</dependencies>
由于maven 中约定大于配置
第二步编写在resource下的mybatis-config.xml 配置无法被maven 自动识别需要在pom文件中添加 资源过滤的配置
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/system?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456
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">
<!--Mybatis核心配置文件-->
<configuration>
<!--读取外部配置文件-->
<properties resource="db.properties"/>
<settings>
<!--显示的开启全局缓存-->
<setting name="cacheEnabled" value="true"/>
<!--开启驼峰命名规则自动转换-->
<setting name="mapUnderscoreToCamelCase" value="true" />
<!--开启log4j-->
<setting name="logImpl" value="LOG4J"/>
</settings>
<!--给实体类起别名-->
<typeAliases>
<package name="com.hzh.pojo"/>
</typeAliases>
<!--读取连接数据库配置-->
<environments default="MySqlDatabase" >
<environment id="MySqlDatabase" >
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--三种方式 1. resource方式加载映射文件,到指定xml 有多少加载多少
2. class方式:这里需要注意:接口类 和映射文件放在同一个目录下,并文件名要一致
3. 包扫描加载映射文件 : 接口类 和映射文件放在同一个目录下,并文件名要一致-->
<mapper resource="com/hzh/mapper/Student.xml"/>
<mapper resource="com/hzh/mapper/TeacherMapper.xml"/>
</mappers>
</configuration>
/*
* 原生mybatis 使用工具类
* 为了获取sqlSessionFactory -->sqlSession
* */
public class MybatisUtils {
/* String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);*/
public static SqlSessionFactory sqlSessionFactory;
static {
//1. 通过sqlSessionFactory 获取 sqlSession 对象
String resource = "mybatis-config.xml";
InputStream inputStream;
{
try {
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory= new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 2. 既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
// SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映 射的 SQL 语句
//有了SqlsessionFactory,我们就可以从中获得SqlSession的实例了。
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession(true); //如果不设置参数或者参数为false就是手动提交事务,参数设置为true就是自动提交事务
}
}
public interface AdminMapper {
//全查
List<Admin> selectAll();
//增加
int addAdmin(Admin admin);
//删除
int delAdmin(int ad_id);
//修改
int updateAdmin(Admin admin);
//根据id 查
Admin selectById(int ad_id);
}
<?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接口-->
<mapper namespace="com.hzh.mapper.AdminMapper">
<select id="selectAll" resultType="com.hzh.pojo.Admin">
select * from t_admin;
</select>
<insert id="addAdmin" parameterType="com.hzh.pojo.Admin">
insert into t_admin (ad_id,ad_pwd) values (#{ad_id},#{ad_pwd});
</insert>
<delete id="delAdmin" parameterType="int">
delete from t_admin where ad_id = #{ad_id};
</delete>
<update id="updateAdmin" parameterType="com.hzh.pojo.Admin">
update t_admin set ad_pwd = #{ad_pwd}
where ad_id = #{ad_id}
</update>
<select id="selectById" parameterType="int" resultType="com.hzh.pojo.Admin">
select * from t_admin
where ad_id = #{ad_id}
</select>
</mapper>
@Test
public void test01(){
SqlSession sqlSession = MybatisUtils.getSqlSession();////使用MybatisUtils创建sqlSession
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);//反射加载目标Mapper中方法
List<Student> students = studentMapper.queryAll();//调用目标mapper.xml中SQL语句
for (Admin admin : admins) {
for (Student student : students) {
System.out.println(student);
}
/* //增删改 若没有开启自动提交,有事物必须手动提交否则运行成功但无法修改数据库中的
sqlSession.commit();*/
sqlSession.close();//使用完关闭
}
namespace : 命名空间要全限定名到对应的mapper
mybatis 约定:
命名解析:为了减少输入量,MyBatis 对所有具有名称的配置元素(包括语句,结果映射,缓存等)使用了如下的命名解析规则。
- 全限定名(比如 “com.mypackage.MyMapper.selectAllThings)将被直接用于查找及使用。
- 短名称(比如 “selectAllThings”)如果全局唯一也可以作为一个单独的引用。 如果不唯一,有两个或两个以上的相同名称(比如 “com.foo.selectAllThings” 和 “com.bar.selectAllThings”),那么使用时就会产生“短名称不唯一”的错误,这种情况下就必须使用全限定名。
原文:https://www.cnblogs.com/syfw/p/14805596.html