目录
一、mybatis 简单搭建运用,以查询为例
1、项目,导入依赖
<!-- mybatis坐标 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!-- mysql驱动坐标 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
<scope>runtime</scope>
</dependency>
<!-- 单元测试坐标 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- 日志坐标 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
</dependency>
2、数据库,创建数据表,user
3、代码,编写 java 实体类 User
public class User {
private int id;
private String username;
private String password;
//省略get/set方法
}
4、编写 mapper 映射文件,UserMapper.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="userMapper">
<select id="findAll" resultType="com.lagou.domain.User">
select * from User
</select>
</mapper>
5、编写 MyBatis 核心配置文件,SqlMapConfig.xml
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN“
"http://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.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- mapper.xml配置 -->
<mapper resource="com/lagou/mapper/UserMapper.xml"/>
<!-- 扫描使用注解的类 -->
<mapper class="com.lagou.mapper.UserMapper"></mapper>
<!-- 扫描使用注解的类所在的包 -->
<package name="com.lagou.mapper"></package>
</mappers>
</configuration>
6、编写测试代码
//加载核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//获得sqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new
SqlSessionFactoryBuilder().build(resourceAsStream);
//获得sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行sql语句
List<User> userList = sqlSession.selectList("userMapper.findAll");
//打印结果
System.out.println(userList);
//释放资源
sqlSession.close();
7、代理开发方式(Mapper 接口开发)
1)mapper 接口开发,UserMapper
Mapper 接口开发需要遵循以下规范:
- Mapper.xml 文件中的 namespace 与 mapper 接口的全限定名相同;
- Mapper 接口方法名和 Mapper.xml 中定义的每个 statement 的 id 相同;
- Mapper 接口方法的输入参数类型和 mapper.xml 中定义的每个 sql 的 parameterType 的类型相同;
- Mapper 接口方法的输出参数类型和 mapper.xml 中定义的每个 sql 的 resultType 的类型相同;
编写 UserMapper 接口:
pulic interface UserMapper {
User findById(int id);
}
相应的 mapper 配置:
<mapper namespace="com.lagou.mapper.UserMapper">
<select id="findById" parameterType="int" resultType="user">
select * from User where id=#{id}
</select>
</mapper>
2)测试代理方式
@Test
public void testProxyDao() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
// 获得MyBatis框架生成的UserMapper接口的实现类
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.findById(1);
System.out.println(user);
sqlSession.close();
}
8、注解开发方式
注解用于替代 mapper 配置。
1)注解代码 Mapper 接口:
pulic interface UserMapper {
@Select("select * from User where id=#{id}")
User findById(int id);
}
2)测试代码与上方代理接口代码相同,略。
二、mybatis 的其他增删改的搭建运用
项目导入依赖,数据库创建数据表,代码实体类,配置 myBatis 核心文件等都与上方查询相同。
1、mybatis 插入 insert 搭建运用
1)编写 mapper 接口,UserMapper
public interface UserMapper {
int insertUser(User user);
}
2)插入 mapper 映射文件
<mapper namespace="com.lagou.mapper.UserMapper">
<insert id="insertUser" parameterType="com.lagou.domain.User">
insert into user values(#{id},#{username},#{password})
</insert>
</mapper>
3)或者不用 mapper 映射文件,在 mapper 接口方法上,用注解标注
public interface UserMapper {
@Insert("insert into user values (#{id},#{username},#{password})")
int insertUser(User user);
}
4)测试插入代码
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int insert = userMapper.insertUser(user);
System.out.println(insert);
//提交事务
sqlSession.commit();
sqlSession.close();
5)插入数据注意要点
- 插入语句使用 insert 标签;
- 在映射文件中使用 parameterType 属性指定要插入的数据类型;
- Sql 语句中使用 #{实体属性名} 方式引用实体中的属性值;
- 插入操作使用的 API 是 sqlSession.insert(“命名空间.id”,实体对象);
- 插入操作涉及数据库数据变化,所以要使用 sqlSession 对象显示的提交事务,即 sqlSession.commit();
2、mybatis 更新 update 搭建运用
1)编写 mapper 接口,UserMapper
public interface UserMapper {
int updateMapper(User user);
}
2)修改更新 mapper 映射文件
<mapper namespace="com.lagou.mapper.UserMapper">
<update id="updateMapper" parameterType="com.lagou.domain.User">
update user set username=#{username},password=#{password} where id=#{id}
</update>
</mapper>
3)mybatis 注解,mapper 接口代码
public interface UserMapper {
@Update("update user set username=#{username},password=#{password} where id=#{id}")
int updateMapper(User user);
}
4)测试修改更新代码
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int update = userMapper.updateMapper(user);
System.out.println(update);
sqlSession.commit();
sqlSession.close();
5)修改数据注意要点
- 修改语句使用 update 标签;
- 修改操作使用的 API 是 sqlSession.update(“命名空间.id”,实体对象);
3、mybatis 删除 delete 搭建运用
1)编写 mapper 接口,UserMapper
public interface UserMapper {
int deleteById(int id);
}
2)删除 mapper 映射文件
<mapper namespace="com.lagou.mapper.UserMapper">
<delete id="deleteById" parameterType="java.lang.Integer">
delete from user where id=#{id}
</delete>
</mapper>
3)mybatis 注解,mapper 接口代码
public interface UserMapper {
@Delete("delete from user where id=#{id}")
int deleteById(int id);
}
4)测试删除代码
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int delete = userMapper.deleteById(3);
System.out.println(delete);
sqlSession.commit();
sqlSession.close();
5)删除数据注意要点
- 删除语句使用 delete 标签;
- Sql 语句中使用 #{任意字符串} 方式引用传递的单个参数;
- 删除操作使用的 API 是 sqlSession.delete(“命名空间.id”,Object);
文章内容输出来源:拉勾教育Java高薪训练营