SSM之Mybatis入门程序和增删改查

入门程序包含的文件有

  • 核心配置文件
  • 映射配置文件
  • JavaBean
  • 测试代码

一、入门程序

核心配置文件

只需要注意后面的载入映射配置文件即可,数据源和数据库连接池会在spring中配置。

<?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>
    <!-- 和spring整合后 environments配置将废除-->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理,事务控制由mybatis-->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池,由mybatis管理-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql:///mybatis?characterEncoding=utf-8" />
                <property name="username" value="root" />
                <property name="password" value="admin" />
            </dataSource>
        </environment>
    </environments>

    <!--加载映射文件-->
    <mappers>
        <mapper resource="sqlmap\User.xml"/>
    </mappers>

</configuration>
映射配置文件

他的作用是将sql的原语封装成灵活性高的方法。
需要关心的是执行这个操作时输入了什么输出/返回了什么

知识点#{}

用于接收传入的参数

User.xml
<?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 命名空间,作用就是对sql进行分类化管理,理解为sql隔离
 注意:使用mapper代理方法开发,namespace有特殊重要的作用
 -->
<mapper namespace="test">
    <!-- 在映射文件中配置很多sql语句 -->
    <!--需求:通过id查询用户表的记录 -->
    <!-- 通过select执行数据库查询
     id:标识映射文件中的sql,称为statement的id
     将sql语句封装到mappedStatement对象中,所以将id称为statement的id
     parameterType:指定输入参数的类型
     #{}标示一个占位符,
     #{value}其中value表示接收输入参数的名称,如果输入参数是简单类型,那么#{}中的值可以任意。

     resultType:指定sql输出结果的映射的java对象类型,select指定resultType表示将单条记录映射成java对象
     -->
    <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
        SELECT * FROM  user  WHERE id=#{value}
    </select>

    <!-- 根据用户名称模糊查询用户信息,可能返回多条
	resultType:指定就是单条记录所映射的java对象类型
	${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。
	使用${}拼接sql,引起 sql注入
	${value}:接收输入参数的内容,如果传入类型是简单类型,${}中只能使用value
	 -->
</mapper>
测试一下
package cn.itcast.mybatis.first;

import cn.itcast.mybatis.po.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.io.Resources;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;


/**
 * 入门程序
 */
public class MybatisFirst {
    // 根据id查询用户信息
    @Test
    public void findUserByIdTest() throws IOException{
        // mybatis配置文件
        String resource = "SqlMapConfig.xml";
        // 得到配置文件流
        InputStream inputStream =  Resources.getResourceAsStream(resource);
        //创建会话工厂,传入mybatis配置文件的信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

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

        // 通过SqlSession操作数据库
        // 第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id
        // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数
        // sqlSession.selectOne结果 是与映射文件中所匹配的resultType类型的对象
        // selectOne查询出一条记录
        User user = sqlSession.selectOne("test.findUserById", 1);
        System.out.println(user);
        // 释放资源
        sqlSession.close();
    }
}

二、数据库的CRUD操作

对数据库进行写,必须要commit

2.1 模糊查询

sql原语:select * from user where username like '%小明'

模糊查询返回的是数组,因此输入是字符串类型,返回的是Bean的类型(配置文件中并不会返回List)

User.xml
引入新知识点${}

传入的参数会直接拼接到sql语句中,因此注意sql注入

<select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">
        select * from user where user.username like '%${value}'
    </select>
测试代码
List<User> list = sqlSession.selectList("test.findUserByName","小明");
 for (User user : list) {
      System.out.println(user);
 }

上面的小节一下

1、parameterType 指定了输入参数的类型
resultType指定了查询结果的类型

2、#{}表示一个占位符。
${}表示拼接符

3、selectOne 查询一个记录,进行映射
selectList 查询一个列表,进行映射

2.2 插入操作

传入的参数是User类型,通过OGNL可以直接调用到user的属性

<!--插入用户操作-->
    <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
        insert into user (id,username,birthday,sex,address) value (#{id},#{username},#{birthday},#{sex},#{address})
    </insert>

执行代码:需要session.commit()
	   sqlSession.insert("test.insertUser",user);
        sqlSession.commit();
插入操作的返回主键ID
1、 自增类型主键的返回

mysql中,LAST_INSERT_ID()在insert语句之后使用的话,会得到最后插入的主键ID。

映射配置文件中
<!--插入用户操作-->
    <!--将插入的数据的主键值返回,只适用于自增类型主键
    keyProperty:返回的是User的什么属性
    order: 相对于insert,本条语句应该在atter,之后进行执行
    resultType:指定返回的是什么类型
    -->
    <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            SELECT LAST_INSERT_ID()
        </selectKey>
        insert into user (id,username,birthday,sex,address) value (#{id},#{username},#{birthday},#{sex},#{address})
    </insert>
执行代码中
User user = new User();
        user.setUsername("七冠服");
        sqlSession.insert("test.insertUser",user);
        sqlSession.commit();
        System.out.println(user.getId());// 这里就能获得返回的id了
2、 非自增主键的返回

和自增类型相似,通过mysql的uuid()方法,在表中的主键类型是varchar,长度35。
执行思路:
先通过uuid()得到主键,再输入再sql语句中。
执行uuid()语句就要在insert之前了。

把selectKey换成,要注意,insert语句中就要加上ID了。
在这里插入图片描述

2.3 修改操作

配置文件
  <!--更新用户
    通过传入User进行更新,由于更新对象由id标识.因此id是必须要有的
    -->
    <update id="updateUser" parameterType="cn.itcast.mybatis.po.User">
        update user set username = #{username},birthday = #{birthday},sex = #{sex},address = #{address} where id = #{id}
    </update>
执行代码
User user = new User();
        user.setId(31);
        user.setUsername("七冠服");
        user.setBirthday(new Date( 1998,4,9));
        user.setSex("女");
        user.setAddress("湛江");
        sqlSession.update("test.updateUser",user);

        sqlSession.commit();

2.4 删除操作

User.xml
<!--删除用户-->
    <delete id="deleteUserById" parameterType="java.lang.Integer">
        delete from user where id = #{value}
    </delete>
执行代码
  sqlSession.delete("test.deleteUserById",10);

        sqlSession.commit();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值