文章目录
- 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 configurationPUBLIC "-//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 mapperPUBLIC "-//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查询语句:
测试运行:
@Testpublic 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 usersWHERE id IN<foreach item="item" index="index" collection="list" open="(" separator="," close=")">#{item}</foreach>
</select>