mybatis实现增删查改

mybatis实现增删查改

流程图:
mybatis实现增删查改

// mybatis配置文件
// 在此遇到一个问题,发现读取配置文件的时候读取不到,原因是idea的 classpath的问题,解决的方案
// 可以在 http://blog.csdn.net/shifangwannian/article/details/48882201 找到解决方案
// SqlmapConfig.xml 是全局配置文件
String resource = "SqlmapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);

// 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
        .build(inputStream);

// 通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 执行查询语句
User user = sqlSession.selectOne("test.queryUserById", 1);

注意的是: SqlSessionFactory 一般使用单例模式进行管理,是线程安全的,sqlSession是线程不安全的,一般其使用要放在每一个方法之中。

  • 配置 SqlMapConfig 中的内容
<?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://localhost:3306/mybatis?characterEncoding=utf-8" />
                <property name="username" value="root" />
                <property name="password" value="011152" />
            </dataSource>
        </environment>
    </environments>

    <!--配置映射文件,文件里的内容是对User这张表的SQL语句-->
    <mappers>
        <mapper resource="SqlMap/User.xml"/>
    </mappers>

</configuration>
  • 配置 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 与 id 一同组合成为一个sql执行的statement的唯一标识,
 参数类型 parameterType, 返回值类型-->
<mapper namespace="test">
    <!--通过id 查询用户信息-->
    <select id="queryUserById" parameterType="int" resultType="com.dustin.dao.User">
        select * from user where id = #{id}
    </select>

    <!--通过name查询用户信息-->

    <!-- 根据用户名称模糊查询用户信息,可能返回多条
     resultType:指定就是单条记录所映射的java对象 类型
     ${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。
    使用${}拼接sql,引起 sql注入
     ${value}:接收输入 参数的内容,如果传入类型是简单类型,${}中只能使用value
     -->
    <!--#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,
    #{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。
    如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。

    ${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换,
    ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,
    ${}括号中只能是value。
-->
    <select id="queryUserByName" parameterType="java.lang.String" resultType="com.dustin.dao.User">
        select * from User where username like '%${value}%'
    </select>

    <!--添加用户-->
    <insert id="insertUser" parameterType="com.dustin.dao.User">
        <!--
          将插入数据的主键(自增的)返回,返回到user对象中
          SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值,只适用与自增主键

          keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性
          order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序
          resultType:指定SELECT LAST_INSERT_ID()的结果类型
        -->
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            SELECT LAST_INSERT_ID()
        </selectKey>
        insert into user(username, birthday, sex, address ) values(#{username}, #{birthday}, #{sex}, #{address})

        <!--&lt;!&ndash; 针对函数生成的的一个id, 则id的生成返回要在insert语句之前&ndash;&gt;-->
        <!--<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">-->
            <!--SELECT uuid()-->
        <!--</selectKey>-->
        <!--insert into user(id, username, birthday, sex, address ) values(#{id}, #{name}, #{birthday}, #{sex}, #{address})-->

    </insert>
</mapper>

说明: 本文大部分内容都是跟随者传播智课的教学视频学习而来,可以看做是翻译文章,只是自己吸收之后又书写一遍,加深自己的知识理解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值