MyBatis入门【二】入门项目-原始DAO开发

49 篇文章 5 订阅
37 篇文章 1 订阅

前言

  • 本文主要讲解入门项目的基本知识
  • 本文乃是我学习笔记总结,不足之处,还望指点
  • 本文中因多处使用注释,为方便书写,若以“//”双斜杠开头的都是注释
  • 本文中为了清晰讲解基础知识,其中的代码并未完整

SqlMapConfig.xml相关

相信大家在学习MyBatis之前肯定对于项目的创建已经熟到想吐的地步了吧(哈哈)

在这里就不从零开始创建项目了,请读者自行创建项目(在这里创建简单的Java项目就行,注意环境的配置,jar包等不要漏了)

SqlMapConfig简单配置

<configuration>
    <!--  和spring整合后environment配置将移除 -->

    <environments default="development">
        <environment id="development">
            <!--  //使用jdbc事务管理,事务控制由mybatis -->
            <transactionManager type="JDBC"/>
            <!--  //数据库连接池,由mybatis管理 -->
            <dataSource type="POOLED">
                <!-- 此处配置的是MySQL数据库 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql;//localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    //加载配置文件
    <mappers>
        <mapper resource="User.xml"/>
    </mappers>
</configuration>

XXX.xml映射文件

在映射文件中配置相关配置、SQL语句等

映射文件命名:

  • User.xml(原始ibatis命名)
  • mapper代理开发映射文件名称叫XXXMapper.xml

User.xml配置文件:

namespace命名空间,作用就是对sql进行分类化管理,理解SQL隔离

注意:使用mapper代理方法开发,namespace有特殊重要的作用

<mapper namespace="test">
</mapper>

简单SELECT

通过ID查询用户记录、select执行数据库查询

参数说明

ID:标识映射文件的SQL
    将SQL语句封装到mappedStatement对象中,所以将ID称为statement的id

parameterType:指定输入参数的类型

#{}表示一个占位符
#{id}:其中的id表示接收输入的参数,参数名称就是id,如果输入参数是简单类型,#{}中的参数名可以任意,可以value或其他名称

resultType:指定SQL输出结果的所映射的Java对象类型,select指定resultType表示将单条记录映射成Java对象

代码示例

<select id="findUserById" parameterType="int" resultType="User全路径">
    SELECT  * FROM USER WHERE id=#{id}
</select>

根据用户名称模糊查询用户信息,可以返回多条

参数说明

resultType:指定就是单条记录所映射的Java对象类型

${}:表示拼接SQL串,将接收到参数的内容不加任何修饰拼接在SQL中
使用${}拼接SQL,可能会引起SQL注入

${value}:接收输入参数的内容,如果传入类型是简单类型,${}中只能使用value

代码示例

<select id="findUserByName" parameterType="java.lang.String" resultType="User全路径">
    SELECT  * FROM USER WHERE id LIKE '%${value}%'
</select>

简单INSERT

INSERT基本说明

参数说明

parameterType:指定输入参数类型是pojo(包括用户信息)

id:唯一标识

#{}中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值

代码示例

<insert id="insertUser" parameterType="User全路径">
    insert into user(id,name,password) value(#{id},#{name},#{password})
</insert>

自增ID插入数据返回ID

在绝大部分的时候,我们进行插入表记录的时候,都需要进行ID的返回,接下来我们讨论的是在增加了表记录后,将ID返回在对象属性中

基本原理:将插入数据的主键返回,返回到user对象中

参数说明

  • SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值,只适用于自增主键
  • keyProperty:将查询到主键值设置到parameterType指定对象的哪个属性
  • order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说的顺序
  • resultType:指定结果类型

代码示例

<insert id="insertUser" parameterType="User全路径">
    //将插入数据的主键返回,返回到user对象中
    <selectKey keyProperty="id" oder="AFTER" resultType="java.lang.Integer">
        SELECT LAST_INSERT_ID()
    </selectKey>

    insert into user(id,name,password) value(#{id},#{name},#{password})
</insert>

非自增ID的情况插入数据返回ID

使用MySQL的UUID()生成主键

执行过程:

  • 首先通过uuid()得到主键,将主键设置到user对象的id属性中
  • 其次在insert执行时,从user对象中取出id属性值

代码示例

<insert id="insertUser" parameterType="User全路径">
    <selectKey keyProperty="id" oder="BEFORE" resultType="java.lang.String">
        SELECT uuid()
    </selectKey>

    insert into user(id,name,password) value(#{id},#{name},#{password})
</insert>

简单DELETE

需要传入用户id
需要传入用户的更新信息

parameterType指定user对象,根据id和更新信息,注意,id为必须值

<update id="updateUser" parameterType="User全路径" 
    update user set  name=#{name},birthday=#{birthday}  where id=#{id} 
</update>

测试类

说明:
为节约篇幅和更利于读者阅读,测试代码中已经书写了CRUD的测试,用户在实际测试中应分开编写

@Test
public void findUserByIdTest(){
    try{
        //mybatis配置文件
        String resource = "SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream = Resource.getResourceAsStream(resource);
        //创建会话工厂,传入mybatis的配置文件信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //通过工厂得到SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();


        //1、通过SqlSession查询数据库
        //第一个参数:映射文件中statement的id,等于 namespace+"."+statement的id
        //第二个参数:指定和映射文件所匹配的parameterType类型的参数
        //结果返回的是与映射文件中所匹配的resultType类型的对象
        User user = (User) sqlSession.selectOne("test.findUserById",1);
        //进行操作的代码

        //2、插入数据
        sqlSession.insert("test.insertUser",user);
        //提交事务
        sqlSession.commit();

        //3、删除用户
        sqlSession.delete("test.deleteUser",id值);
        //提交事务
        sqlSession.commit();

        //4、更新用户信息
        sqlSession.update("test.updateUser",user);
        //提交事务
        sqlSession.commit();

    } catch(Exception e){

    } finally {
        //释放资源
        sqlSession.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值