接着上一篇文章《Mybatis入门(一)》我们继续来讲解一下《Mybatis的入门程序(二)》,废话不多说进入正题

【需求】

1、根据用户id(主键)查询用户信息

2、根据用户名称模糊查询用户信息

3、添加用户

4、删除 用户

5、更新用户

【环境】

java环境:jdk1.7.0_72

eclipse:indigo

mysql:5.1

mybatis运行环境(jar包):

从https://github.com/mybatis/mybatis-3/releases下载,3.2.7版本,解压之后有下图的文件

log4j.properties

# Global logging configuration
#在开发环境下日志级别要设置成DEBUG,生产环境设置成info或error
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

【工程结构】

SQLMap是存储mapper.xml文件

【SqlMapConfig.xml (全局配置文件)】

配置mybatis的运行环境,数据源、事务等。

【根据用户id(主键)查询用户信息】

1、创建po类

2、映射文件

映射文件命名:

User.xml(原始ibatis命名),mapper代理开发映射文件名称叫XXXMapper.xml,比如:UserMapper.xml、ItemsMapper.xml

在映射文件中配置sql语句。

3、在SqlMapConfig.xml加载映射文件

在sqlMapConfig.xml中加载User.xml:

4、程序编写

// 根据id查询用户信息,得到一条记录结果@Testpublic void findUserByIdTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionSqlSession 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();}

【根据用户名称模糊查询用户信息】

1、映射文件

使用User.xml,添加根据用户名称模糊查询用户信息的sql语句。

<!-- 根据用户名称模糊查询用户信息,可能返回多条resultType:指定就是单条记录所映射的java对象 类型${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。使用${}拼接sql,引起 sql注入${value}:接收输入 参数的内容,如果传入类型是简单类型,${}中只能使用value--><select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">SELECT * FROM USER WHERE username LIKE '%${value}%'</select>

2、程序代码

// 根据用户名称模糊查询用户列表@Testpublic void findUserByNameTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// list中的user和映射文件中resultType所指定的类型一致List<User> list = sqlSession.selectOne("test.findUserByName", "小明");System.out.println(list);sqlSession.close();}

【添加用户】

1、映射文件

在 User.xml中配置添加用户的Statement

2、程序代码

// 添加用户信息@Testpublic void insertUserTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 插入用户对象User user = new User();user.setUsername("王小军");user.setBirthday(new Date());user.setSex("1");user.setAddress("河南郑州");sqlSession.insert("test.insertUser", user);// 提交事务sqlSession.commit();
        System.out.println(user.getId());// 获取用户信息主键// 关闭会话sqlSession.close();}

3、自增主键返回

mysql自增主键,执行insert提交之前自动生成一个自增主键。

通过mysql函数获取到刚插入记录的自增主键:LAST_INSERT_ID() ,是insert之后调用此函数。

修改insertUser定义:

4、非自增主键返回(使用uuid())

  1. 使用mysql的uuid()函数生成主键,需要修改表中id字段类型为string,长度设置成35位。
  2. 执行思路:先通过uuid()查询到主键,将主键输入 到sql语句中。执行uuid()语句顺序相对于insert语句之前执行。

通过oracle的序列生成主键:

<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">SELECT 序列名.nextval()
</selectKey>insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})

【删除用户】

1、映射文件

<!-- 删除 用户根据id删除用户,需要输入 id值--><delete id="deleteUser" parameterType="java.lang.Integer">delete from user where id=#{id}</delete>

2、代码

// 根据id删除 用户信息@Testpublic void deleteUserTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 传入id删除 用户sqlSession.delete("test.deleteUser", 39);// 提交事务sqlSession.commit();// 关闭会话sqlSession.close();}

【更新用户】

1、映射文件

<!-- 根据id更新用户分析:需要传入用户的id需要传入用户的更新信息parameterType指定user对象,包括 id和更新信息,注意:id必须存在#{id}:从输入 user对象中获取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>

2、代码

 // 更新用户信息@Testpublic void updateUserTest() throws IOException {// mybatis配置文件String resource = "SqlMapConfig.xml";// 得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);// 创建会话工厂,传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 更新用户信息User user = new User();//必须设置iduser.setId(41);user.setUsername("王大军");user.setBirthday(new Date());user.setSex("2");user.setAddress("河南郑州");sqlSession.update("test.updateUser", user);// 提交事务sqlSession.commit();// 关闭会话sqlSession.close();}

【总结】

1、parameterType

在映射文件中通过parameterType指定输入 参数的类型。

2、resultType

在映射文件中通过resultType指定输出结果的类型。

3、  #{}和${}

(1)#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。

(2)如果接收简单类型,#{}中可以写成value或其它名称。

(3)#{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

(4)${}表示一个拼接符号,会引用sql注入,所以不建议使用${}。

(5)${}接收输入参数,类型可以是简单类型,pojo、hashmap。

(6)如果接收简单类型,${}中只能写成value。

(7)${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

4、 selectOne和selectList

(1)selectOne表示查询出一条记录进行映射。如果使用selectOne可以实现使用selectList也可以实现(list中只有一个对象)。

(2)selectList表示查询出一个列表(多条记录)进行映射。如果使用selectList查询多条记录,不能使用selectOne。

如果使用selectOne报错:

org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 4

Mybatis-入门程序(二)相关推荐

  1. JavaWeb——MyBatis入门程序

    一.引言 一般MyBatis与springMVC常常一起使用,而且与hibernate相比有着天然的优势,继续推进. MyBatis应用程序根据XML配置文件创建SqlSessionFactory,S ...

  2. Mybatis入门程序增删改查操作

    学习目标 了解Mybatis的基本知识 熟悉Mybatis的工作原理 掌握Mybatis入门程序的编写 文章目录 1.初始Mybatis 2.Mybatis入门程序 3.Mybatis操作总结 1.初 ...

  3. Mybatis入门(二)

    Mybatis入门(二) 一.利用resultMap 复杂类型映射 1.一对一 2.一对多 3.多对多 二.动态sql构建 三. 延迟加载 四.缓存技术 五.mybatis的反向工程 六.#{}和${ ...

  4. 使用Eclips开发Mybatis入门程序

    MyBatis入门程序 数据库 本程序所需数据库 mybatisuser,表user不再细述. 环境配置 导入jia包,mybatis-3.5.7.jar,mysql-connector-java-5 ...

  5. MyBatis入门(二)---一对一,一对多

    一.创建数据库表 1.1.创建数据表同时插入数据 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.6.27-log : Database - mybati ...

  6. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    阅读目录 一:原始dao开发方法 二:mapper代理方法(只需要mapper接口,相当于dao接口) 承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisS ...

  7. Mybatis入门程序

    Mybatis入门:log4j配置.全局配置.mapper配置.测试类四部分 >log4j配置 #info,error. log4j.rootLogger=debug,stdout # log4 ...

  8. 【MyBatis框架】MyBatis入门程序第二部分

    我们通过写一个简单的MyBatis小项目来在实战中学习MyBatis,接着上一篇继续 我们开始实现需求中的添加和删除用户功能 (1)向数据库中添加用户数据 使用User.xml,加入添加用户的sql语 ...

  9. 【MyBatis框架】MyBatis入门程序第一部分

    为什么80%的码农都做不了架构师?>>>    我们通过写一个简单的MyBatis小项目来在实战中学习MyBatis 1.需求 根据用户id(主键)查询用户信息 根据用户名称模糊查询 ...

  10. mybatis入门(二)之XML 映射配置文件

    转载自   mybatis XML 映射配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properties)信息.文档的顶层结构如下: c ...

最新文章

  1. 基于OpenCV的单目摄像机测距
  2. MySQL数据库一个字段对应多个值得模糊查询
  3. API Hooking 的原理
  4. UA MATH567 高维统计专题1 稀疏信号及其恢复6 随机设计矩阵下LASSO的估计误差
  5. MFC用代码创建工具栏
  6. 一分钟了解ArrayList和Vector的区别
  7. Shiro <shiro:hasPermission >标签不生效,shiro权限不生效原因
  8. 模块间接口设计的原则
  9. java中 8进制 10进制 2进制 16进制 相互转换
  10. 利用matlab程序分别设计一正弦型信号_ARM Mbed数字信号处理
  11. 热的感觉是顺经络走的
  12. linux教学之安装python与pip环境
  13. 华为云服务器搭建PaddlePaddle GPU环境
  14. 大数据使用的5种主要数据挖掘技术
  15. API LayoutInflater
  16. java多文件文件压缩加密下载
  17. FPGA平台开发基础
  18. 2018工业互联网峰会在京召开
  19. Android系统SD卡各类文件夹名称
  20. Sweet Butter 香甜的黄油

热门文章

  1. TOP100summit分享实录 | JFrog高欣:Kubernetes is hard!JFrog的Kubernetes实践
  2. win7计算机的蓝牙,win7电脑蓝牙怎么开
  3. 软碟通 刻录linux光盘,使用UltraISO软碟通刻录光盘
  4. 新浪微博API错误代码说明对照表
  5. 恶搞视频聊天偷拍源码
  6. Flume+Kafka+Storm+Redis流计算实现wordcount示例
  7. JavaScript 对象
  8. 5W2H 分析法
  9. 和老外聊天、发邮件常用英语缩写。
  10. python版我的世界怎么去天堂_我的世界中国版手游怎么去天堂 我的世界去天堂代码指令...