mybatis(1)
1.什么是mybatis框架?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射实体类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
持久层框架:
框架: 别人写好的半成品。我们拿来加上我们自己的代码即可完成对于的操作。
持久层: 把java中的类对象放入到数据库表记录的过程就是持久化过程。
orm映射: Object relative mapping. 对象关系映射。
对象表示java类,关系表示数据库
实体类-----表
属性------表的字段
对象-----表中的一条记录。
集合----表中所有的记录。
2.为什么使用mybatis框架

原来的jdbc操作数据库代码中可以看出,我们操作数据库非常麻烦。需要手动设置占位符的值,而且需要手动封装处理结果集。 我们可以使用mybatis完成上面繁琐的操作。
3.如何使用mybatis
3.1 创建一个maven的java工程

3.2 添加依赖
<dependencies>
<!--mysql驱动依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.34</version>
</dependency>
<!--mybatis的依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
</dependencies>
3.3 编写实体类
@Data
public class User {
private Integer id;
private String username;
private String password;
private String realname;
}
3.4 编写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="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<!--name是固定的 value根据需要配置为自己的内容-->
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
</configuration>
3.5 编写映射文件---sql
配置实体类和数据库表中字段的映射关系,以及包含我们编写的sql语句。 这里的代码也不需要背。
<?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="qy178">
<!--根据id查询用户信息-->
<!--select表示查询标签。id标签的唯一标识。
resultType:返回值类型。sql执行完毕后应该把结果封装到哪个类中。
#{id}:表示占位符。 #{}表示一个占位符,值会从外部获取。
-->
<select id="getById" resultType="com.ykq.entity.User">
select * from tbl_user where id=#{id}
</select>
</mapper>
3.6 把映射文件放入配置文件中
测试时只会读取配置文件的内容。
<!--映射文件的路径-->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
测试
这里的代码也无需背,因为后期有tomcat完成配置文件的加载。
@Test
public void test01() throws Exception{
//1. 读取mybatis配置文件。
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
//2. 获取SqlSessionFactory类对象
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream);
//3. 获取sqlSession对象 表示与数据库的一次会话。 理解为Connection连接对象
SqlSession sqlSession=factory.openSession();
//String statement,调用映射文件中的哪个标签。
// Object parameter. 该标签需要的参数值。。
User user = sqlSession.selectOne("qy178.getById",13);
System.out.println(user);
}
4. mybatis完成crud操作
public class TestUser {
@Test
public void test04() throws Exception{
//1. 读取mybatis配置文件。
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
//2. 获取SqlSessionFactory类对象
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream);
//3. 获取sqlSession对象 表示与数据库的一次会话。 理解为Connection连接对象
SqlSession sqlSession=factory.openSession();
int row = sqlSession.update("qy178.deleteUser", 10);
System.out.println("影响的行数:"+row);
//提交事务
sqlSession.commit();
}
@Test
public void test03() throws Exception{
//1. 读取mybatis配置文件。
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
//2. 获取SqlSessionFactory类对象
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream);
//3. 获取sqlSession对象 表示与数据库的一次会话。 理解为Connection连接对象
SqlSession sqlSession=factory.openSession();
User user=new User(10,"dbx","123456","戴柏辛");
int row = sqlSession.update("qy178.updateUser", user);
System.out.println("影响的行数:"+row);
//提交事务
sqlSession.commit();
}
@Test
public void test02() throws Exception{
//1. 读取mybatis配置文件。
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
//2. 获取SqlSessionFactory类对象
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream);
//3. 获取sqlSession对象 表示与数据库的一次会话。 理解为Connection连接对象
SqlSession sqlSession=factory.openSession();
User user=new User(null,"qy178","123456","yan");
int row = sqlSession.insert("qy178.addUser", user);
System.out.println("影响的行数:"+row);
//提交事务
sqlSession.commit();
}
@Test
public void test01() throws Exception{
//1. 读取mybatis配置文件。
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
//2. 获取SqlSessionFactory类对象
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream);
//3. 获取sqlSession对象 表示与数据库的一次会话。 理解为Connection连接对象
SqlSession sqlSession=factory.openSession();
//String statement,调用映射文件中的哪个标签。
// Object parameter. 该标签需要的参数值。。
User user = sqlSession.selectOne("qy178.getById",13);
System.out.println(user);
}
@Test
public void test05() throws Exception{
//1. 读取mybatis配置文件。
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
//2. 获取SqlSessionFactory类对象
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream);
//3. 获取sqlSession对象 表示与数据库的一次会话。 理解为Connection连接对象
SqlSession sqlSession=factory.openSession();
//String statement,调用映射文件中的哪个标签。
// Object parameter. 该标签需要的参数值。。
List<User> users = sqlSession.selectList("qy178.getAll");
System.out.println(users);
}
}
<?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="qy178">
<!--根据id查询用户信息-->
<!--select表示查询标签。id标签的唯一标识。
resultType:返回值类型。sql执行完毕后应该把结果封装到哪个类中。
#{id}:表示占位符。 #{}表示一个占位符,值会从外部获取。
-->
<select id="getById" resultType="com.ykq.entity.User">
select * from tbl_user where id=#{id}
</select>
<!--查询所有-->
<select id="getAll" resultType="com.ykq.entity.User">
select * from tbl_user
</select>
<!--添加 parameterType:参数类型. 该属性可以省略
注意: #{username}表示从外部获取一个参数,参数名称必须和实体类中的属性名一致。
-->
<insert id="addUser" parameterType="com.ykq.entity.User">
insert into tbl_user values(null, #{username},#{password},#{realname})
</insert>
<!--
注意: #{id}表示从外部获取一个参数,参数名称必须和实体类中的属性名一致。
-->
<update id="updateUser" parameterType="com.ykq.entity.User">
update tbl_user set username=#{username},password=#{password},realname=#{realname} where id=#{id}
</update>
<!--
1.
-->
<delete id="deleteUser" parameterType="int">
delete from tbl_user where id=#{id}
</delete>
</mapper>
5. 企业开发模式
上面我们完成的crud操作都是调用的SqlSession类中提供的方法。使用它提供的方法的缺点参数即使写错,编译时也不会报错。 企业习惯自己写方法,调用自己的方法。 我们就需要自定义一个dao接口。接口中声明自己的方法。至于接口中抽象方法都要mybatis框架按照你的映射文件帮你实现。
1.创建实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private Integer id;
private String name;
private String sex;
private Double salary;
private Date birthday;
}
2.创建dao接口
public interface StudentDao {
//根据id查询学生信息
public Student getById(int id);
//添加学生信息---
public int add(Student student);
//修改学生信息---
public int update(Student student);
//删除学生信息---
public int delete(int id);
//查询所有
public List<Student> getAll();
}
3.创建映射文件
<?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="com.ykq.dao.StudentDao">
<!--添加-->
<insert id="add" parameterType="com.ykq.entity.Student">
insert into tbl_student values(null,#{name},#{sex},#{salary},#{birthday})
</insert>
<!--修改-->
<update id="update" parameterType="com.ykq.entity.Student">
update tbl_student set name=#{name},sex=#{sex},salary=#{salary},birthday=#{birthday} where id=#{id}
</update>
<!--删除-->
<delete id="delete">
delete from tbl_student where id=#{id}
</delete>
<!---->
<select id="getAll" resultType="com.ykq.entity.Student">
select * from tbl_student
</select>
<!--
select表示查询标签
id:必须唯一,而且要和接口中对于的方法名一致。
-->
<select id="getById" resultType="com.ykq.entity.Student">
select * from tbl_student where id=#{id}
</select>
</mapper>
4.把映射文件放入配置文件中
<!--映射文件的路径-->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
<mapper resource="mapper/StudentMapper.xml"/>
</mappers>
5.测试
@Test
public void test02() throws Exception{
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
//获取接口的代理实现类.
StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
//调用接口中的方法
Student s=new Student(null,"小米","男",5000.0,new Date());
studentDao.add(s);
`
sqlSession.commit();
}
6. 安装插件mybatisx

浙公网安备 33010602011771号