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

posted on 2024-12-24 16:38  小木不痞  阅读(29)  评论(0)    收藏  举报

导航