Mybatis框架

目录

1.什么是mybatis

2.为什么使用mybatis

3.如何使用mybatis

(1)引入mybatis和mysql的jar包

(2)创建mybatis的配置文件

(3)创建mybatis和数据库的映射文件

4.lombok插件

(1)idea安装lombok插件

(2)工程中引入lombok依赖

(3)在实体类上添加lombok注解

5.添加sql日志

(1)添加日志的jar

(2)添加日志的配置文件log4j.properties

6.通过dao和映射文件的关联完成操作

(1)创建一个dao接口并定义

(2)创建映射文件

7.添加时如何返回递增的主键值

8.列明和属性名不一致

9.动态spl

(1)动态sql的标签

(2)choose

(3)where

(4)if

(5)set

(6)foreach

10.mybatis映射文件处理特殊文字

11.mybatis模糊查询


1.什么是mybatis

MyBatis 是一款优秀的持久层Dao框架,它支持定制化 SQL、存储过程以

及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及

获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信

息,将接口和 Java 的 POJOs(Java实体类)映射成数据库中的记录.

2.为什么使用mybatis

可以简化jdbc的操作以及占位符赋值以及查询结果集的封装。

3.如何使用mybatis

(1)引入mybatis和mysql的jar包



<!--https://mvnrepository.com/artifact/org.mybatis/mybatis-->

    <dependency>

      <groupId>org.mybatis</groupId>

      <artifactId>mybatis</artifactId>

      <version>3.4.6</version>

    </dependency>

    <!--mysql驱动-->

    <dependency>

      <groupId>mysql</groupId>

      <artifactId>mysql-connector-java</artifactId>

      <version>8.0.28</version>

</dependency>

(2)创建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" />
      <!--数据源的配置:name的值固定 value的值要根据客
户自己修改-->
      <dataSource type="POOLED">
        <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)创建mybatis和数据库的映射文件

?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:命名空间   可以随便起名,但是后期我们要求命名空间的值必须和所对应的dao相同-->

<mapper namespace="qy151.user">

  <!--查询 根据id查询用户信息  select标签用于查询的标签  id:标签的唯一标识 resultType: 定义返回的类型 把sql查询的结果封装到哪个实体类钟  #{id}===表示占位符等价于? 这是mybatis框语  -->

  <select id="findById"resultType="com.ykq.entity.User">

   select * from tb_user where userid=#{id}

 </select>

</mapper>

注意:把映射文件注册到配置文件上

<!--注册映射文件-->

  <mappers>

    <!--resource:引用资源文中的映射文件 url:网络上的映射文件-->

    <mapper resource="mapper/UserMapper.xml" />

  </mappers>

4.lombok插件

(1)idea安装lombok插件

(2)工程中引入lombok依赖

<!--lombok的依赖-->

    <dependency>

      <groupId>org.projectlombok</groupId>

      <artifactId>lombok</artifactId>

      <version>1.18.24</version>

    </dependency>

(3)在实体类上添加lombok注解

@Data //set和get方法以及toString方法

@NoArgsConstructor //无参构造方法

@AllArgsConstructor //所有参数的构造方法

public class User {

  private int userid;

  private String username;

  private String realname;

}

5.添加sql日志

(1)添加日志的jar

<dependency>

            <groupId>log4j</groupId>

            <artifactId>log4j</artifactId>

            <version>1.2.17</version>

        </dependency>

(2)添加日志的配置文件log4j.properties

#控制台输出的相关设置

log4j.appender.console = org.apache.log4j.ConsoleAppender

log4j.appender.console.Target = System.out

log4j.appender.console.Threshold=DEBUG

log4j.appender.console.layout = org.apache.log4j.PatternLayout

log4j.appender.console.layout.ConversionPattern=[%c]-%m%n

#文件输出的相关设置

log4j.appender.file = org.apache.log4j.RollingFileAppender

log4j.appender.file.File=D:/qy151/log/qy151.log

log4j.appender.file.MaxFileSize=10mb

log4j.appender.file.Threshold=DEBUG

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n

#日志输出级别

log4j.logger.org.mybatis=DEBUG

log4j.logger.java.sql=DEBUG

log4j.logger.java.sql.Statement=DEBUG

log4j.logger.java.sql.ResultSet=DEBUG

log4j.logger.java.sql.PreparedStatement=DEBUG

 

6.通过dao和映射文件的关联完成操作

(1)创建一个dao接口并定义

public interface UserDao {
   
    public List<User> findAll();
}

(2)创建映射文件

<?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:命名空间
       必须和dao相同
-->
<mapper namespace="com.ykq.dao.UserDao">
    <select id="findAll" resultType="com.ykq.entity.User">
        select * from tb_user
    </select>
</mapper>

7.添加时如何返回递增的主键值

<insert id="addUser" parameterType="com.ykq.entity.User"
            useGeneratedKeys="true" keyProperty="userId">
          insert into tb_user values(null,#{username},#{realname},#(address))
    </insert>
//增
    @Test
    public void testAdd()throws Exception {
        Reader resourceAsReader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory factory =new SqlSessionFactoryBuilder().build(resourceAsReader );
        SqlSession session = factory.openSession();
        UserDao userDao =session.getMapper(UserDao.class );
        User user= new User(20,"twl","唐舞麟","学院");
        System.out.println(user);
        userDao.add(user);
        System.out.println(user);
        session.commit();
        session.close();
    }

8.列明和属性名不一致

<resultMap id="StuMapper" type="com.ykq.entity.Student">
         <!--主键的映射关系 column:列名 property:属性名-->
         <id column="stu_id" property="id"/>
         <!--普通列的映射关系-->
         <result column="stu_name" property="name"/>
         <result column="stu_age" property="age"/>
    </resultMap>

 <!--resultType和ResultMap二者只能用一个-->
    <select id="findOne" resultMap="StuMapper">
        select * from tb_stu where stu_id=#{id}
    </select>

9.动态spl

(1)动态sql的标签

if, choose, foreach, where, set, trim

(2)choose

<select id="findOne" resultType="com.ykq.entity.Emp">
        select * from account where 1=1
        <choose>
             <when test="name!=null and name!=''">
                 and  name=#{name}
             </when>
            <when test="money!=null">
                and  money=#{money}
            </when>
            <otherwise>
                and isdeleted=0
            </otherwise>
        </choose>
    </select>
```

(3)where

<select id="findOne" resultType="com.ykq.entity.Emp">
        select * from account
        <where>
            <if test="name!=null and name!=''">
                 and  name=#{name}
            </if>
            <if test="money!=null">
                 and  money=#{money}
            </if>
        </where>
    </select>

(4)if

<select id="findOne" resultType="com.ykq.entity.Emp">
        select * from account where 1=1
        <if test="name!=null and name!=''">
             and  name=#{name}
        </if>
        <if test="money!=null">
             and  money=#{money}
        </if>
    </select>

(5)set

<update id="update">
          update account
          <set>
             <if test="name!=null and name!=''">
                name=#{name},
             </if>
             <if test="money!=null">
                money=#{money},
             </if>
             <if test="isdeleted!=null">
                 isdeleted=#{isdeleted},
             </if>
             <if test="created!=null">
                  created=#{created},
             </if>
             <if test="updated!=null">
                  updated=#{updated},
             </if>
          </set>
          where id=#{id}
    </update>

(6)foreach

<1>查询

<select id="findByIds" resultType="com.ykq.entity.Emp">
        select * from account where id in
        <foreach collection="array" item="id" open="(" close=")" separator=",">
             #{id}
        </foreach>
    </select>

<2>删除

 <delete id="batchDelete">
        <foreach collection="array" item="id" open="delete from account where  id in(" close=")" separator=",">
            #{id}
        </foreach>
    </delete>

<3>添加

<insert id="saveBatch">
        insert into account(name,isdeleted) values
        <foreach collection="list" item="acc" separator=",">
            (#{acc.name},#{acc.isdeleted})
        </foreach>
    </insert>

10.mybatis映射文件处理特殊文字

<select id="findOne" resultType="com.ykq.entity.Emp">
           <![CDATA[select * from account where id >#{min} and id <#{max}]]>
    </select>

11.mybatis模糊查询

<select id="findByLike" resultType="com.ykq.entity.Account">
        select * from account where name like '%${name}%'
    </select>

public class Student {
    private int id;
    private String name;
    private int age;
    private String sex;
    private Integer classId;

    private Clazz clazz;
}
public class Clazz {
    private Integer cid;
    private String cname;

}
<resultMap id="baseMap" type="com.ykq.entity.Student">
            <id column="stu_id" property="id"/>
            <result column="stu_name" property="name"/>
            <result column="stu_age" property="age"/>
            <result column="sex" property="sex"/>
            <result column="class_id" property="classId"/>
            <association property="clazz" javaType="com.ykq.entity.Clazz">
                <id column="cid" property="cid"/>
                <result column="cname" property="cname"/>
            </association>
    </resultMap>
    <select id="findStudentById" resultMap="baseMap">
         select * from tb_stu s join tb_class c on s.class_id=c.cid where stu_id=#{id}
    </select>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值