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. Smartbi集成性怎么样,是否方便与已有的Web应用集成?

    Smartbi产品具有强大的集成能力,它采用纯JAVA开发,支持J2EE系统的嵌入式部署,它对外提  供所有功能的API访问接口,可以实现灵活的控制,能够方便无缝与已有的Web应用进行集成. 支持丰富 ...

  2. SQL SERVER 学习过程(一)

    还记得以前在学校的学习过数据库SQL SERVER 2008 R2 的教程,从学校毕业出来后的哪家单位基本没怎么使用过数据库,现在也忘得差不多了 做些相关的练习熟悉熟悉 --创建数据库-- creat ...

  3. 案例十:shell编写nginx服务启动程序

    使用源码包安装的Nginx没办法使用"service nginx start"或"/etc/init.d/nginx start"进行操作和控制,所以写了以下的 ...

  4. 【C#表达式树 四】Expression类上的函数列表

    Expression相当于工厂,这个工厂有各式各样的模型(函数),用来生成各种零部件(节点类型),最后组装成表达式树. Expressions这个命名空间有各种个容器用陈放生产出来的零部件. Expr ...

  5. Qt:打印输出到控制台,类似C++的cout

    1. #include<qDebug> 2. qDebug<<"Hello,world!"; 补充,如果不是控制台文件,比如是窗口应用程序,需要在pro文件 ...

  6. 前端js webuploader上传(导入)excel文件

    项目开发中用到导入(上传)Excel文件 我使用的是百度的webuploader: 1:下载:http://fex.baidu.com/webuploader/(官方下载/示例) 2:使用Web Up ...

  7. linux下的硬盘分区、格式化、挂载

    linux下的MBR(msdos)分区.格式化.挂载 在linux下,需要使用一块硬盘. 需要进行以下四步: 识别硬盘-----分区规划-----格式化-----挂载 步骤一:分区规划 MBR模式分区 ...

  8. Node.js躬行记(16)——活动配置化

    一直想将一些常规活动抽象化,制作成可配置的.原先的计划是做成拖拽的,那种可视化搭建,运营也能自己搭建页面. 这是一个美好的愿景,但是现实不允许我花太多精力去制作这样一个系统.经过权衡后,先设计成一个可 ...

  9. cmd 连接宝塔终端

  10. VUE npm run build的项目出现跨域请求的问题npm run dev没有这个问题

    报错信息 Access to XMLHttpRequest at 'http://platformapi-test.lih-elearning.cn/api/v1/login' from origin ...