2019独角兽企业重金招聘Python工程师标准>>>

mybatis学习笔记(3)-入门程序一

标签: mybatis


[TOC]


工程结构

在IDEA中新建了一个普通的java项目,新建文件夹lib,加入jar包,工程结构如图。

  • log4j.properties
# Global logging configuration
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
  • SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//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://120.25.162.238:3306/mybatis001?characterEncoding=utf-8" /><property name="username" value="root" /><property name="password" value="123" /></dataSource></environment></environments></configuration>

映射文件

  • sqlmap/User.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//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的idparameterType:指定输入参数的类型#{}标示一个占位符,#{value}其中value表示接收输入参数的名称,如果输入参数是简单类型,那么#{}中的值可以任意。resultType:指定sql输出结果的映射的java对象类型,select指定resultType表示将单条记录映射成java对象--><select id="findUserById" parameterType="int" resultType="com.iot.mybatis.po.User">SELECT * FROM  user  WHERE id=#{value}</select><!-- 根据用户名称模糊查询用户信息,可能返回多条resultType:指定就是单条记录所映射的java对象类型${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。使用${}拼接sql,引起 sql注入${value}:接收输入参数的内容,如果传入类型是简单类型,${}中只能使用value--><select id="findUserByName" parameterType="java.lang.String" resultType="com.iot.mybatis.po.User">SELECT * FROM user WHERE username LIKE '%${value}%'</select></mapper>

在sqlMapConfig.xml中加载User.xml

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

程序代码

  • po类User.java
package com.iot.mybatis.po;import java.util.Date;/*** Created by Administrator on 2016/2/21.*/
public class User {//属性名要和数据库表的字段对应private int id;private String username;// 用户姓名private String sex;// 性别private Date birthday;// 生日private String address;// 地址public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User [id=" + id + ", username=" + username + ", sex=" + sex+ ", birthday=" + birthday + ", address=" + address + "]";}
}
  • 测试代码
package com.iot.mybatis.first;import com.iot.mybatis.po.User;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** Created by Administrator on 2016/2/23.*/
public class MybatisFirst {//根据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();}// 根据用户名称模糊查询用户列表@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.selectList("test.findUserByName", "小明");System.out.println(list);sqlSession.close();}}

输出:

  • findUserByIdTest()
DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 1857815974.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@6ebc05a6]
DEBUG [main] - ==>  Preparing: SELECT * FROM user WHERE id=?
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <==      Total: 1
User [id=1, username=王五, sex=2, birthday=null, address=null]
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@6ebc05a6]
DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@6ebc05a6]
DEBUG [main] - Returned connection 1857815974 to pool.
  • findUserByNameTest()
DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 1596467899.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@5f282abb]
DEBUG [main] - ==>  Preparing: SELECT * FROM user WHERE username LIKE '%小明%'
DEBUG [main] - ==> Parameters:
DEBUG [main] - <==      Total: 3
[User [id=16, username=张小明, sex=1, birthday=null, address=河南郑州], User [id=22, username=陈小明, sex=1, birthday=null, address=河南郑州], User [id=25, username=陈小明, sex=1, birthday=null, address=河南郑州]]
DEBUG [main] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@5f282abb]
DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@5f282abb]
DEBUG [main] - Returned connection 1596467899 to pool.

总结

  • parameterType

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

  • resultType

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

  • #{}${} #{}表示一个占位符号; ${}表示一个拼接符号,会引起sql注入,所以不建议使用

  • selectOneselectList selectOne表示查询一条记录进行映射,使用selectList也可以使用,只不过只有一个对象 selectList表示查询出一个列表(参数记录)进行映射,不嗯能够使用selectOne查,不然会报下面的错:

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

作者@brianway更多文章:个人网站 | CSDN | oschina

转载于:https://my.oschina.net/brianway/blog/625244

mybatis学习笔记(3)-入门程序一相关推荐

  1. mybatis学习笔记(1)-对原生jdbc程序中的问题总结

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(1)-对原生jdbc程序中的问题总结 标签:mybatis [TOC] 本文总结jdbc编程的一般步骤 ...

  2. MyBatis学习笔记2 ——第一个MyBatis程序

    MyBatis学习笔记2 --第一个MyBatis程序 参考教程B站狂神https://www.bilibili.com/video/BV1NE411Q7Nx 环境搭建 建立一个mybatis数据库用 ...

  3. Mybatis学习笔记(二) 之实现数据库的增删改查

    开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...

  4. mybatis学习笔记(13)-延迟加载

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...

  5. Qt学习笔记,Qt程序架构设计要旨

    Qt学习笔记,Qt程序架构设计要旨 时间过得很快,转眼学习Qt已经有一个多月了,对Qt的学习也在不断的深入中.自己手下的code也很多了,不过不得不说,还有很多的部分没有接触过,比如网络编程,2D,3 ...

  6. MyBatis多参数传递之Map方式示例——MyBatis学习笔记之十三

    前面的文章介绍了MyBatis多参数传递的注解.参数默认命名等方式,今天介绍Map的方式.仍然以前面的分页查询教师信息的方法findTeacherByPage为例(示例源代码下载地址:http://d ...

  7. ant的下载与安装——mybatis学习笔记之预备篇(一)

    看到这个标题是不是觉得有点奇怪呢--不是说mybatis学习笔记吗,怎么扯到ant了?先别急,请容我慢慢道来. mybatis是另外一个优秀的ORM框架.考虑到以后可能会用到它,遂决定提前学习,以备不 ...

  8. MyBatis多参数传递之混合方式——MyBatis学习笔记之十五

    在本系列文章的<MyBatis多参数传递之Map方式示例>一文中,网友mashiguang提问如下的方法如何传递参数:public List findStudents(Map condit ...

  9. Linux操作系统学习笔记【入门必备】

    Linux操作系统学习笔记[入门必备] 文章目录 Linux操作系统学习笔记[入门必备] 1.Linux入门 2.Linux目录结构 3.远程登录 3.1 远程登录Linux-Xshell5 3.2 ...

最新文章

  1. python sqlalchemy操作SQLite
  2. 数据结构:排序趟数 / 比较次数与序列的原始状态有关的排序方法有哪些?
  3. javaweb分页查询oracle,JavaWeb项目 利用Oracle数据库实现分页查看细讲
  4. 云计算作为当前趋势 能带给你哪些好处?
  5. Beta阶段第2周/共2周 Scrum立会报告+燃尽图 10
  6. Zabbix 结合 bat 脚本与计划任务开启 windows 远程桌面
  7. TCP流模式与UDP数据报模式
  8. css中绝对定位和浮动的异同
  9. ⭐️ vue项目使用微信表情;vue引入微信表情emoji;vue中使用微信表情包emoji;
  10. NPS 3.0:净推荐值的补充性财务指标 - 赢得性增长率(EGR)
  11. 2021年中国牛肉市场供需现状、进出口贸易及价格走势分析[图]
  12. Vue知识(一)Vue基础语法
  13. python里的π怎么输入_【后端开辟】python里的π怎样输入
  14. python编程剪刀石头布思路_Python制作简单的剪刀石头布游戏
  15. 阿里、有道科大讯飞齐为荣耀Magic2打call,透露YOYO想不到的技能
  16. 位置2处的索引超过边界总数matlab,位置 2 处的索引超出数组边界(不能超出 2)。...
  17. windows10启动/关闭MySQL服务的两种方法
  18. java安全架构____MD5加密原理和简介
  19. 大一c语言餐馆点菜对话,餐馆点餐英语情景对话练习
  20. 价格术语trade term (price term)

热门文章

  1. Linux 多应用程序docker自动部署脚本
  2. 关于HashMap根据Value获取Key
  3. 使用plsql连接远程oracle数据库配置
  4. 网站自动登录功能的设计[转]
  5. Spring 在 xml配置文件 或 annotation 注解中 运用Spring EL表达式
  6. openSUSE-openOffice无法输入中文
  7. Facade模式——设计模式学习笔记
  8. ***“出更”---获取源码的***
  9. 沉思录---Windows Phone软件开发Beta版回首
  10. JavaScript 的简单学习2