文章目录
- 1. mybatis
- 2. 基本使用
- (1) maven坐标
- (2) 配置文件编写
- (3) 数据库操作
- (4) 注解查询
- 2. 基本配置
- (1) 读取外部配置文件
- (2) mapper映射
- 3. 映射文件
- 查询
- 删除/修改/新增
- 动态sql
1. mybatis
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
中文网: https://mybatis.org/mybatis-3/zh_CN/index.html
2. 基本使用
(1) maven坐标
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
(2) 配置文件编写
编写mybatis配置的
MapperConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/stu"/>
<property name="username" value="root"/>
<property name="password" value="xjy1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--指定mapper映射文件在哪-->
<mapper resource="org/example/dao/UserMapper.xml"/>
</mappers>
</configuration>
编写sql语句映射:
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.example.dao.UserMapper">
<!--sql语句编写-->
</mapper>
(3) 数据库操作
编写测试类:
public static void main(String[] args) throws IOException {
InputStream in = Resources.getResourceAsStream("MapperConfig.xml");
// 获取SqlSessionFactory对象
SqlSessionFactory session = new SqlSessionFactoryBuilder().build(in);
// 获取SqlSession对象
SqlSession sqlSession = session.openSession();
// 执行sql语句
String one = sqlSession.selectOne("org.example.dao.UserMapper.selectOne");
System.out.println(one);
sqlSession.close();
}
sql语句映射中编写sql语句:
<mapper namespace="org.example.dao.UserMapper">
<select id="selectOne" resultType="string">
select name from user where id = 050100
</select>
</mapper>
(4) 注解查询
创建查询接口:
public interface UserMapper {
@Select("select name from user where id = 050100")
String selectOne();
}
删除之前映射文件中的xml查询语句:
测试运行:
@Test
public void selectOne() throws IOException {
InputStream in = Resources.getResourceAsStream("MapperConfig.xml");
SqlSession sqlSession = new SqlSessionFactoryBuilder()
.build(in)
.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
String s = mapper.selectOne();
System.out.println(s);
}
2. 基本配置
(1) 读取外部配置文件
<configuration>
<!--外部配置文件加载-->
<properties resource="jdbc.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--指定mapper映射文件在哪-->
<mapper resource="org/example/dao/UserMapper.xml"/>
</mappers>
</configuration>
(2) mapper映射
<mappers>
<mapper resource=""/>
<mapper resource=""/>
<mapper resource=""/>
</mappers>
3. 映射文件
查询
<!--接收int类型,返回字符串类型-->
<select id="selectPerson" parameterType="int" resultType="string">
SELECT name FROM user WHERE id= #{id}
</select>
删除/修改/新增
常用属性 :
id 在命名空间中唯一的标识符,可以被用来引用这条语句。
parameterType 将会传入这条语句的参数的类全限定名或别名。这个属性是可选的,因为 MyBatis 可以根据语句中实际传入的参数计算出应该使用的类型处理器(TypeHandler),默认值为未设置(unset)
useGeneratedKeys :(仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false。(主键返回)
<insert id="insert">
sql语句
</insert>
<update id="update">
sql语句
</update>
<delete id="delete">
delete from Author where id = #{id}
</delete>
动态sql
常用标签:
if
where
foreach
<select id="select" resultType="string">
SELECT name FROM user
<WHERE>
<if test="name!= null">
AND name =#{name}
</if>
</WHERE>
</select>
<select id="selectUsersByIds" parameterType="java.util.List" resultType="User">
SELECT * FROM users
WHERE id IN
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>