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. RFC2544学习频率“Learning Frequency”详解—信而泰网络测试仪实操

    在RFC2544中, 会有一个Learning Frequency的字段让我们选择, 其值有4个, 分别是learn once, learn Every Trial, Learn Every Fram ...

  2. IPv6 OSPFv3路由协议测试——信而泰网络测试仪实操

    关键词 IPv6; OSPFv3; OSPFv2. 前言:在网络部署中,动态路由协议是重要的组成部分.良好的路由协议,是保证网络可靠.稳定运行的基础.为了适应IPv6协议栈的变化,OSPFv3协议在保 ...

  3. vim中的incsearch不好用,没有动态效果,为什么——incsearch is not working

    虽然使用Linux好多年了,使用vim也好多年了,但是使用vim进行search的时候重来也没有想过要添加动态效果,近来突然有了兴致想要添加这个功能,不过发现居然不好用,在百度上找了好长时间居然没有一 ...

  4. 【C#】AssemblyLoadContext 加载程序集

    使用 .NET Core 3.0 的 AssemblyLoadContext 实现插件热加载 一般情况下,一个 .NET 程序集加载到程序中以后,它的类型信息以及原生代码等数据会一直保留在内存中,.N ...

  5. 服务器CPU很高-怎么办(Windbg使用坑点)

    最近,碰到了一个线上CPU服务器很高的问题,并且也相当紧急,接到这个任务后,我便想到C#性能分析利器,Windbg. 终于在折腾半天之后,找出了问题,成功解决,这里就和大家分享一下碰到的问题. 问题1 ...

  6. shell脚本编写自动启动服务方法

    shell脚本编写自动启动服务方法 前言 ln :创建连接文件 默认创建的是硬连接,好比复制 ,但是两个文件会同步命令:ln ./java/android/aa.txt aaa s :创建的是软连接变 ...

  7. linux 测试机器端口连通性方法

    转至:https://blog.csdn.net/z1134145881/article/details/54706711 几种常用方法 下面一一介绍: 1 telnet方法 2 wget方法 3 s ...

  8. 实现按钮跳转&下划线等

    按钮点击跳转页面:(在java文件里写) 1 public class MainActivity extends AppCompatActivity { 2 3 private Button mbtn ...

  9. el-dialog设置为点击弹窗以外的区域不自动关闭弹窗

    两种方法:单个设置或者全局设置 第一种:(单个设置) 在el-dialog标签中添加:close-on-click-modal="false"即可 <el-dialog ti ...

  10. ConvertHelper

    DataTable 转Json using Newtonsoft.Json; public static string DataTableToJson(DataTable dt) { varJsonS ...