1、入门程序实现需求

根据用户id查询一个用户信息

根据用户名称模糊查询用户信息列表

添加用户(二)

更新用户(二)

删除用户(二)

2、引入Mybatis所需 jar 包(Maven工程)

<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.7</version>
</dependency> <dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.0</version>
</dependency> <dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>2.2</version>
</dependency> <dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency> <dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency> <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>

  最终引入jar包:

 

2、在classpath下创建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

3、在classpath下创建SqlMapConfig.xml,如下:

<?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事务管理-->
<transactionManager type="JDBC" />
<!-- 数据库连接池-->
<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="root" />
</dataSource>
</environment>
</environments> </configuration>

4、在classpath下的sqlmap目录下创建sql映射文件Users.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">
<!--
parameterType:指定输入参数的类型,这里指定int型
#{id}:其中的id表示接收输入的参数,参数的名称为id,如果输入参数是简单类型,
#{}中参数名可以任意,可以是value或其他的名称
resultType:指定sql输出结果所映射的java类型,select 指定resultType表示将单条记录映射成的Java对象
-->
<select id="findUserByIDd" parameterType="int" resultType="com.bjxb.mybatis.pojo.User">
SELECT * FROM USER WHERE ID = #{id}
</select>
</mapper>

5、pojo类作为mybatis进行sql映射使用,pojo类通常与数据库表对应,User.java如下:

Public class User {
private int id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址
get/set……
}

6、在 sqlMapConfig.xml 中加载 User.xml

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

7、根据id查询用户信息,编写程序

public class MybatisFirst {

    // 根据id查询用户的信息,得到一条记录的结果
@Test
public void findUserByIdTest() {
SqlSession sqlSession = null; try {
// mybatis配置文件
String resource = "config/SqlMapConfig.xml";// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource); // 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 通过工厂的到SQLSession
sqlSession = sqlSessionFactory.openSession(); // 通过SQLSession操作数据库
// 第一个参数:就是映射文件中statement中的id,等于=namespace+statement的id
// 第二个参数:指定和映射文件中所匹配的parameterType类型的参数
// sqlSession.selectOne结果是与映射文件中所匹配resultType类型的对象
User user = sqlSession.selectOne("test.findUserById", 1); System.out.println(user);
} catch (Exception e) {
// TODO: handle exception
}finally {
// 释放资源
sqlSession.close();
} }
}

8、根据用户名模糊查询用户信息,编写程序

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

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

  

  我们观察到,输出的 SQL 语句,like后面并没有出现 ?,即占位符。这种情况就有可能出现 SQL 注入

 

  

  (2)编程:

// 根据用户名称来模糊查询用户列表
@Test
public void findUserByNameTest() {
SqlSession sqlSession = null; try {
// mybatis配置文件
String resource = "config/SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource); // 创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 通过工厂的到SQLSession
sqlSession = sqlSessionFactory.openSession(); // list中的User和映射文件中的resultType所指定的类型一致
List<User> list = sqlSession.selectList("test.findUserByName", "小明");
/**
* 方案一(不可行):我们直接传入参数"小明", 映射文件对应为 '%#{value}%'
* 不可行原因: 因为#{}使用的是占位符 ? ,在实际编译过程中,因为我们传入的是字符串,会自动在小明两边加上''
* 最终效果为 name like '%'小明'%' 显然查不出
*
* 方案二(可行):我们可以传入参数 "%小明%",映射文件中用#{}接收
* 优点:防止sql注入; 缺点:却需要我们每次都传入两个%
*
* 方案三(可行):我们依然直接传入"小明",映射文件对应为 '%${}%'
* 优点:我们不需要传入%,只需要传入查询名 ; 缺点:由于${}不会使用占位符 ? 而是直接拼接在SQL中, 会出现如下情况:
* SQL注入可以点击查看博主另一篇博客
*
*/
System.out.println(list); } catch (Exception e) {
// TODO: handle exception
}finally {
sqlSession.close();
} }

9、小结

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

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

  9.3:#{ }和 ${ }的区别:

    #{ } 表示一个占位符,#{ }接收输入参数,类型可以是简单类型,pojo,HashMap。

    如果接收的是简单类型,#{ } 中可以写成value或者其他名称。

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

    

    ${ } 表示一个拼接符,会引起SQL注入,所以不建议使用 ${ }。${ }接收输入参数,类型可以是简单类型,pojo,HashMap。

    如果接收的是简单类型,${ } 中只可以写成value。

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

  9.4:selectOne :表示查询出一条记录进行映射,一条记录也可以用 selectList 实现(查询出的 list 中只有一个对象)

  9.5:selectList :表示查询出一个列表(多条记录)进行映射,多条记录不可以用 selectOne

    如果查询结果是 List,我们使用 selectOne 报错:

    

Mybatis入门程序(一)的更多相关文章

  1. Mybatis入门程序

    作为一个java的学习者,我相信JDBC是大家最早接触也是入门级别的数据库连接方式,所以我们先来回忆一下JDBC作为一种用于执行SQL语句的Java API是如何工作的.下面的一段代码就是最基本的JD ...

  2. MyBatis入门程序(基于XML配置)

    创建一个简单的MyBatis入门程序,实现对学生信息的增删改查功能(基于XML配置) 一.新建一个Java工程,导入MyBatis核心jar包.日志相关的jar包以及连接Oracle数据库所需驱动包, ...

  3. Mybatis学习——Mybatis入门程序

    MyBatis入门程序 一.查询用户 1.使用客户编号查询用户 (1).创建一个数据表 USE spring; #创建一个名为t_customer的表 CREATE TABLE t_customer( ...

  4. MyBatis入门程序(1)

    一.入门程序: 1.mybatis的配置文件SqlMapConfig.xml 配置mybatis的运行环境,数据源.事务等. <?xml version="1.0" enco ...

  5. Mybatis入门程序编写

    执行原理 入门程序编写 1.pom.xml 文件 <dependencies> <dependency> <groupId>mysql</groupId> ...

  6. mybatis入门程序-(二)

    1. 添加配置文件 log4j.properties # Global logging configuration #开发环境下日志级别设置成DEBUG,生产环境设置成info或者error log4 ...

  7. MyBatis入门程序之Mapper代理方式

    Mapper代理的开发方式,程序员只需要编写mapper接口(相当于dao接口)即可,MyBatis会自动为mapper接口生成动态代理实现类. 一.开发规范 1.mapper接口的全限定名要和map ...

  8. Mybatis入门程序(二)

    1.实现需求 添加用户 更新用户 删除用户 2.添加用户 (1)映射文件User.xml(Mapper)中,配置添加用户的Statement <!-- 添加用户: parameterType:指 ...

  9. 2.Mybatis入门程序(单表的增删改成)

    这里讲的单表的增删改查,是由mapper代理的增删改查,先来看看步骤: 1.jar包的导入 2.配置全局的配置文件 3.建立接口 4.编写mapper.xml 5.测试 工程结构:这个你们自己可以调整 ...

随机推荐

  1. 能无缝嵌入Excel的报表工具,报表轻松做!

    现在很多人做数据分析会被推荐选择去用编程R和Python.PowerBI.Tableau.Qlik.Smartbi... 从目前数据分析的行业来说,Excel是世界上使用人数最多的报表分析工具,没有之 ...

  2. Ubuntu更新命令无法执行的,下一步该怎么办?

    对Linux的系统学习的更加深入,所以今天笔者正在Ubuntu20.04 LTS 上部署Sublime Text 的环境时 , 由于对操作的不熟悉,踩了一些坑.拿出来和大家分享. 正在我对照着官方文档 ...

  3. [转帖]Linux 下解压 rar 文件

    转至:https://www.cnblogs.com/jinanxiaolaohu/p/13824185.html https://www.cnblogs.com/xuyaowen/p/unrar_f ...

  4. [python][nginx][https] Nginx 服务器 SSL 证书安装部署

    目录 前言 1 申请证书 2 Nginx 服务器 SSL 证书安装部署 2.1.准备 Nginx 环境 2.2 证书部署 2.3 Nginx 配置 3 最后 参考链接 前言 博主博客中的图片,使用的是 ...

  5. 爬虫之爬取B站视频及破解知乎登录方法(进阶)

    今日内容概要 爬虫思路之破解知乎登录 爬虫思路之破解红薯网小说 爬取b站视频 Xpath选择器 MongoDB数据库 爬取b站视频 """ 爬取大的视频网站资源的时候,一 ...

  6. C#中?和:?和??代表什么

    ?代表可空类型修饰符    引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.为了使值类型也可为空,就可以使用可空类型?:带便三元表达式    int a=b>c?b:c 如果 ...

  7. JZ-034-第一个只出现一次的字符位置

    第一个只出现一次的字符位置 题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). ...

  8. MM32F0140 GPIO驱动LED灯(MM32F0140 GPIO)

    目录: 1.MM32F0140简介 2.MM32F0140系统时钟配置 3.MM32F0140的GPIO外设配置及其初始化 4.使用官网的Systick定时器做延时 5.MM32F0140 GPIO驱 ...

  9. 从ELF文件谈起

    本文信息来源: 又是一期硬核内容:ELF文件格式 What's the difference of section and segment in ELF file format ELF Section ...

  10. svelte组件:Svelte自定义弹窗Popup组件|svelte移动端弹框组件

    基于Svelte3.x自定义多功能svPopup弹出框组件(组件式+函数式) 前几天有分享一个svelte自定义tabbar+navbar组件,今天继续带来svelte自定义弹窗组件. svPopup ...