目录


mybatis 的使用 —— 准备

下载完 mybatis 以后,将其核心包和依赖包导入工程即可 ;不过 mybatis 也依赖于 log4j 因此,需要再导入一个 log4j 的配置文件 ;


mybatis 的使用 —— 搭建好工程结构

创建一个配置包(config),在里面进行 mybatis 的配置,其中全局配置(sqlMapConfig.xml) 就放在这个包下面。

还有一个 sqlMap 包,这里是放置 sql 的配置文件的 ;


mybatis 的使用 —— 创建 sqlMapCnfig.xml 全局配置文件

config 包下面创建创建全局配置文件,全局配置文件的名字是任意的,可随便取名;

<?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">
<!--事务管理,暂时有mybatis管-->
<transactionManager type="JDBC"/>
<!--数据源 暂时也由 mybatis 管理,以后都由 spring 来管理-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatisDay01?charset=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments> </configuration>

mybatis 的使用 —— 根据用户 id 查询用户

  1. 首先在 sqlMap 包下面,创建 映射文件

    映射文件的名字,有2种写法:一种是 xxx.xml;另一种是 xxxMap.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"> <mapper namespace="test">
    <select id="selectBlog" parameterType="int" resultType="xin.ijava.pojo.User">
    select * from User where id = #{id}
    </select>
    </mapper>

    namespace :名称空间,用来隔离 sql 语句

    id :是表示映射文件中的 sql 语句,由于最后 sql 语句被封装到 mappedStatement 对象中,因此,id 也可以看做是 statement对象的 id

    #{}mybatis 中的占位符 ;

    #{id} :这里的 id 是接受输入参数的名字,当输入参数类型是 java基本类型 的时候,id 可以随便取名字。当输入参数类型是 pojo 时候,名字必须是输入参数的名字;

    parameterType :输入参数类型 ;

    resultType:输出结果类型,表示将 单条 结果映射成对应的 java对象类型 ;不管返回的多条记录还是单条记录,它只关心单条或者多条中的单条返回的是什么类型 ;


  2. sqlMapCnfig.xml 中加载映射文件

    <!--加载映射文件-->
    <mappers>
    <!--地址从src包开始写,用斜杠代替-->
    <mapper resource="xin/ijava/config/sqlmap/User.xml"/>
    </mappers>
  3. java 代码编写

    package xin.ijava.mybatis;
    
    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 org.junit.Test;
    import xin.ijava.pojo.User; import java.io.IOException;
    import java.io.InputStream; /**
    * @author An
    */
    public class MybatisTest { @Test
    public void findUserByIdTest() throws IOException {
    // 1、读取全局配置文件,传入会话工厂,以便创建会话,也可以使用 mybatis 的 Resources.getResourceAsStream("") ;读取
    // 参数,都是从src开始写;
    // InputStream inputStream = MybatisTest.class.getClassLoader().getResourceAsStream("xin/ijava/config/sqlMapConfig.xml"); InputStream inputStream = Resources.getResourceAsStream("xin/ijava/config/sqlMapConfig.xml") ;
    // 2、创建会话工厂
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream) ;
    // 3、创建会话
    SqlSession sqlSession = factory.openSession() ;
    // 4、操作数据库
    // selectOne :查询一条记录
    User user = sqlSession.selectOne("test.findUserById",1);
    // 5、关闭会话
    sqlSession.close();
    System.out.println(user);
    } }

mybatis 的使用 —— 根据用户 name 查询用户(模糊查询 )

  1. 配置映射关系文件

        <!--模糊查询-->
    <!--
    ${value} :表示拼接字符串,它不加任何的修饰,进行拼接,会引起 sql注入攻击 ;
    如果是接受基本类型,则里面的参数名,必须是 value ;
    -->
    <select id="findUsersByName" parameterType="java.lang.String" resultType="xin.ijava.pojo.User">
    SELECT * FROM User where name LIKE '%${value}%'
    </select>

  2. java 测试代码

    @Test
    public void findUsersByName() throws IOException {
    InputStream inputStream = Resources.getResourceAsStream("xin/ijava/config/sqlMapConfig.xml") ;
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession sqlSession = factory.openSession() ;
    // selectList :查询出多条记录 ;
    List<User> users = sqlSession.selectList("test.findUsersByName","小明") ;
    System.out.println(users);
    }

mybatis 的使用 —— 插入用户

  1. 配置映射关系

    <!--插入用户-->
    
    <insert id="insertUser" parameterType="xin.ijava.pojo.User">
    -- 主键返回
    -- keyProperty:表示将主键赋给 pojo 的哪一个属性
    -- order:表示该sql 相对于下面的 sql 的执行顺序
    -- resultType :返回值类型
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
    SELECT LAST_INSERT_ID()
    </selectKey> INSERT into user(name,sex,birthday,address) VALUES (#{name},#{sex},#{birthday},#{address}) </insert>

    这里面有个 主键返回 问题;我们一般都设置了主键自增长,这样我们插入进去的对象的 id ,我们是没有赋值的,我们需要将自增长的 id 赋给对象的 id

    mybatis 中,按照上面的方法,可以完成 主键返回 操作 ;其中 主键返回 操作,一定要放在 insert 之后 ;


  2. java 测试代码

      @Test
    public void insertUser() throws IOException {
    InputStream inputStream = Resources.getResourceAsStream("xin/ijava/config/sqlMapConfig.xml") ;
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession sqlSession = factory.openSession() ;
    User user = new User();
    user.setName("YAZ");
    user.setSex("1");
    // mybatis 支持java基本类型的转换的
    user.setBirthday(new Date());
    user.setAddress("苏州 张家港");
    sqlSession.insert("test.insertUser",user) ;
    // 提交
    sqlSession.commit();
    sqlSession.close(); System.out.println(user.getId()); // 主键已经被赋值给 User 对象
    }

mybatis 的使用 —— 删除用户

  1. 配置映射关系

    <!--删除用户-->
    <delete id="deleteUserById" parameterType="java.lang.Integer">
    DELETE FROM user WHERE id = #{id}
    </delete>
  2. java 测试代码

    @Test
    public void deleteUser() throws IOException {
    InputStream inputStream = Resources.getResourceAsStream("xin/ijava/config/sqlMapConfig.xml") ;
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession sqlSession = factory.openSession() ; sqlSession.delete("test.deleteUserById",2) ;
    // 提交
    sqlSession.commit();
    sqlSession.close(); }

mybatis 的使用 —— 更新用户

  1. 配置映射关系

        <!--更新用户-->
    <update id="updateUserById" parameterType="xin.ijava.pojo.User">
    UPDATE USER SET name = #{name},sex = #{sex},birthday = #{birthday},address = #{address} WHERE id = #{id}
    </update>
  2. java 测试代码

    @Test
    public void updateUserById() throws IOException {
    InputStream inputStream = Resources.getResourceAsStream("xin/ijava/config/sqlMapConfig.xml") ;
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
    SqlSession sqlSession = factory.openSession() ; User user = new User();
    user.setId(3);
    user.setName("YAZ");
    user.setSex("1");
    // mybatis 支持java基本类型的转换的
    user.setBirthday(new Date());
    user.setAddress("苏州 吴侬软语"); sqlSession.update("test.updateUserById",user) ;
    // 提交
    sqlSession.commit();
    sqlSession.close(); }

小结

我们一路写下来,已经发现,mybatis 主要就在于 配置映射关系,自己控制 sql 语句 ;

(三)mybatis 的使用(入门)的更多相关文章

  1. MyBatis(1)——快速入门

    MyBatis 简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...

  2. (转) MyBatis(1)——快速入门

    MyBatis 简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...

  3. (转)MyBatis框架的学习(二)——MyBatis架构与入门

    http://blog.csdn.net/yerenyuan_pku/article/details/71699515 MyBatis框架的架构 MyBatis框架的架构如下图: 下面作简要概述: S ...

  4. Membership三步曲之入门篇 - Membership基础示例

    Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 -  Membership基础示例 Membership三步曲之进阶篇 -  深入剖析Pro ...

  5. 第三章 Git的入门 - 读书笔记

    Android驱动月考3 第三章 Git的入门 - 读书笔记 对于Github,这是全世界最大的开源平台,你可以把你做的项目在这里开源,把你发现的一些新技术在这里开源,向全世界的开发者们分享,大家都彼 ...

  6. [转]Membership三步曲之入门篇 - Membership基础示例

    本文转自:http://www.cnblogs.com/jesse2013/p/membership.html Membership三步曲之入门篇 - Membership基础示例   Members ...

  7. webpack入坑之旅(三)webpack.config入门

    这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...

  8. java 日志体系(三)log4j从入门到详解

    java 日志体系(三)log4j从入门到详解 一.Log4j 简介 在应用程序中添加日志记录总的来说基于三个目的: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作: 跟踪代 ...

  9. Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建

    目录 Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建 0.项目准备 1.数据持久层Mybatis+MySQL 1.1 MySQL数据准备 1.2 Mybatis ...

  10. ASP.NET 安全系列 Membership三步曲之入门篇 - Jesse Liu

    Membership 三步曲 ASP.NET 安全系列 Membership三步曲之入门篇 ASP.NET 安全系列 Membership三步曲之进阶篇 ASP.NET 安全系列 Membership ...

随机推荐

  1. 在Android中使用OpenGL ES开发第(五)节:GLSL基础语法

    一.前期基础储备笔者之前的四篇文综述了Android中使用OpenGL ES绘制基本图形和实现了简单的相机预览,初次接触OpenGL ES开发的读者可能对其中新的概念比较迷惑,尤其是其中的顶点着色器( ...

  2. Ubuntu 14.04 更换为阿里云源

    #备份sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak#编辑sudo vim /etc/apt/sources.list,清空后,加入以下 ...

  3. Java 使用线程池分批插入或者更新数据

    需求:在开发业务报表时,需要从MySQL数据库读取数据后进行操作,然后写入数据库,使用定时任务跑批. 分析:①兼顾性能,②  MySQL没有Oracle那么方便.强大的存储过程.综上所述,使用线程池以 ...

  4. ReactiveCocoa实践

    1.按钮addTarget [[self.aDepositBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNe ...

  5. QtCreator集成的MSVC套件有问题

    MSVC编译出来的内部签名算法的程序,相同的代码,验签结果和MINGW编译出来的不一样.MINGW编译出来的结果是正确的 怀疑是因为QtCreator集成的msvc有问题,可能是编码问题,可能是其他问 ...

  6. vs.net2017在编辑的wpf的xaml文件引用本程序集下的类提示“找不到”

    local对应就是当前exe程序下的类,会提示“...命令空间...找不到...” 因为我调整过生成的,于是尝试调回来anyCPU 问题解决. 看了一下vs.net2017的所在目录"C:\ ...

  7. Tensorflow使用训练好的模型进行测试,发现计算速度越来越慢

    实验时要对多个NN模型进行对比,依次加载直到第8个模型时,发现运行速度明显变慢而且电脑开始卡顿,查看内存占用90+%. 原因:使用过的NN模型还会保存在内存,继续加载一方面使新模型加载特别特别慢,另一 ...

  8. 会声会影x7 每次安装均会提示:已安装这个产品的另一个版本

    会声会影x7 每次安装均会提示:已安装这个产品的另一个版本 卸载C++2008 的库就行了 文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论

  9. kotlin之MutableMap委托

    fun main(arg: Array<String>) { val map = mutableMapOf("name" to "tom", ) v ...

  10. ios 自动去重

      //resultArrM 数据原//_indexArray 过滤后的数据//MYSelectAreaModel 模型 /* 重定义索引 */ - (void)sy_indexArray{ /* 索 ...