MyBatis基础

##MyBatis语句基础

MyBatis流程

  • 1,配置pom文件,引入MyBatis包以及其他依赖
<!--    导入依赖-->
    <dependencies>
        <!--        mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
        <!--        mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--        junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

为了防止由于maven中约定大于配置,而导致出现资源导出失败问题,
在build中配置resource来防止我们资源导出失败的问题。

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
  • 2,配置Mybatis-config.xml的配置文件
    <environments default="development">
        <environment id="development">
<!--            事务管理-->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
<!--                数据库的版本是8的话驱动的值里必须是在mysql之后加上cj再进行子项目-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<!--                如果数据库的版本是8,则必须配置时区不然时间会是乱的-->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=GMT"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

对每一个实体类的操作,即每一个mapper.xml都需要在Mybatis的核心配置文件中进行注册
,否则不能使用,且路径必须为全路径。

    <mappers>
<!--        资源文件需要使用/路径-->
        <mapper resource="com/chen/dao/UserMapper.xml"/>
    </mappers>
  • 3,搭建mapper.xml文件
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.chen.dao.UserMapper">

    <select id="getUserList" resultType="User">
        # 查询语句
        select * from mybatis.user;
    </select>
    <select id="getUserId" parameterType="int" resultType="User">
        # 查询语句
        select * from mybatis.user where id = #{id};
    </select>
    <select id="getUserLimit" resultType="User">
        select * from mybatis.user limit #{start}, #{size};
    </select>

<!--    插入用户  当返回值为基本数据类型时,我们可以不用写resultType,-->
<!--    <insert id="addUser">-->
    <insert id="addUser" parameterType="User">
        insert into mybatis.user (id, name, pwd) values (#{id},#{name},#{pwd});
    </insert>

<!--    更新用户  好像不写参数类型也可以-->
    <update id="updateUser">
        update mybatis.user
        set name = #{name},
            pwd  = #{pwd}
        where id = #{id};
    </update>

    <delete id="deleteUser" parameterType="int">
        delete from mybatis.user where id = #{id};
    </delete>
</mapper>
  • 4, 创建工具类-即sqlSession工厂
package com.chen.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import sun.security.mscapi.CPublicKey;

import java.io.IOException;
import java.io.InputStream;
import java.security.PublicKey;

//工具类 sqlSessionFactory ---> sqlSession
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;

    static {
//        获取sqlSessionFactory对象
        InputStream inputStream = null;
        try {
            String resource = "mybaits-config.xml";
            inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
//        既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
//        SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
    }

    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}
  • 5,在java服务中进行使用
   package com.chen.dao;
   
   import com.chen.pojo.User;
   import com.chen.utils.MybatisUtils;
   import org.apache.ibatis.session.SqlSession;
   import org.junit.Test;
   
   import java.util.HashMap;
   import java.util.List;
   import java.util.Map;
   
   public class UserDaoTest {
   
       @Test
       public void test(){
   //        第一步获取SqlSession对象
           SqlSession sqlSession = MybatisUtils.getSqlSession();
           try {
               //        方式一:执行SQL
               UserMapper mapper = sqlSession.getMapper(UserMapper.class);
               List<User> userList = mapper.getUserList();
   //        方式二:不推荐使用
   //        List<User> userList = sqlSession.selectList("com.chen.dao.UserDao.getUserList");
               for (User user : userList) {
                   System.out.println(user);
               }
           }catch (Exception e){
               e.printStackTrace();
           }finally {
               //        关闭SqlSession
   //            SqlSession的实例不是线程安全的,因此不能被共享,即每次打开了一个SqlSession,返回一个响应后就要关闭他
               sqlSession.close();
           }
       }
}

Mapper.xml配置文件问题

传参parameterType

有时候我们可以不配置parameterType,但是这是正确的,因为mybatis能自动识
别,但为了代码的可读性,我们最好还是写上。parameterType好像不能传两种类
型进去,只能传一个,即:parameterType=“int,String”,是不可以的会发生报错,要么
就封装,构造map,要么就直接不写parameterType,然后使用index来引用参数,要么使用注解。

  • 1,parameterType为基本数据类型
<delete id="deleteUser" parameterType="int">
        delete from mybatis.user where id = #{id};
</delete>
  • 2,parameterType为封装好的map,list等
<!--    通过map来传入参数-->
    <update id="updateUser2" parameterType="Map">
        update mybatis.user
        set pwd = #{userPwd}
        where id = #{userId};
    </update>
  • 3,parameterType为实体类
    <insert id="addUser" parameterType="com.chen.pojo.User">
        insert into mybatis.user (id, name, pwd) values (#{id},#{name},#{pwd});
    </insert>

注意:此时类需要写全路径。

  • 4,parameterType不写,使用index来引用
<select id="getXXXBeanList" resultType="XXBean">

  select t.* from tableName where id = #{0} and name = #{1}  

</select>  
public List<XXXBean> getXXXBeanList(String xxId, String xxCode);  
rsultType返回值类型

返回值类型不能不写,因为mybatis需要将获得结果封装到相应的类中,
查询的字段与类的属性需要一致,rsultType 是权限命名 必须是全路径,
返回值类型 当返回值类型为list时也可以仅仅写值类型(泛型)。

    <select id="getUserList" resultType="com.chen.pojo.User">
        # 查询语句
        select * from mybatis.user;
    </select>
//    获取全部用户
    List<User> getUserList();

但当返回值为基本数据类型时,我们可以不用写resultType。

<!--    <insert id="addUser">-->
    <insert id="addUser" parameterType="com.chen.pojo.User">
        insert into mybatis.user (id, name, pwd) values (#{id},#{name},#{pwd});
    </insert>
//    添加用户
    int addUser(User user);

基本CRUD语法

查询

    <select id="queryBlogChoose" parameterType="map" resultType="Blog">
        select *
        from mybatis.blog
        <where>
            <choose>
                <when test="title != null">
                    and title = #{title}
                </when>
                <when test="author != null">
                    and author = #{author}
                </when>
                <otherwise>
                    and views = #{views}
                </otherwise>
            </choose>
        </where>
    </select>

删除

    <delete id="deleteUser" parameterType="int">
        delete from mybatis.user where id = #{id};
    </delete>

插入

    <insert id="addUser" parameterType="com.chen.pojo.User">
        insert into mybatis.user (id, name, pwd) values (#{id},#{name},#{pwd});
    </insert>

更新

    <update id="updateBlog" parameterType="Blog">
        update mybatis.blog
        set title = #{title},
            author = #{author}
        where id = #{id};
    </update>
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值