Mybatis简单入门
前言
之前一直有直接使用Mybatis,但是没有细致的整理出来。长时间没有使用,细致的内容都忘记了。因此借此机会,从头开始整理,以后可以直接查看此次记录的内容。
Mybatis的介绍
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录.
JDBC->dbutils(自动封装)->MyBatis->Hibernate
参考官网文档介绍:http://www.mybatis.org/mybatis-3/zh/getting-started.html
准备工作
依赖包
从Mybatis的官网下载最新的jar,目前github上最新的是mybatis-3.4.6,并下载源码包导入project冲使用。下载mysql的驱动包:mysql-connector-java-5.1.7-bin.jar。下载log4j的jar:log4j-1.2.16.jar(目的是为了让mybatis能够输出日志,便于查看执行过程。此外,这次只使用Mybatis,因此在Java Project中进行验证,没有使用Maven进行管理包。
数据库
create database mybatis;
use mybatis;
CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);
INSERT INTO users(NAME, age) VALUES('Tom', 12);
INSERT INTO users(NAME, age) VALUES('Jack', 11);
配置文件
src下新建log4j配置文件log4j.properties
log4j.properties\uFF0C
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG log4j.properties\uFF0C
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
src新建mybatis的配置文件mybatis-config.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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments>
<!-- <mappers>
<mapper resource="com/lion/test1/UserMapper.xml"/>
</mappers>-->
</configuration>
验证
- 新建pojo User 属性 int id,String name,int age //getter setter toString 注意:此处的属性需和数据库表字段保持一致,不然无法完成字段映射,后面讲解不一致时如何进行字段映射。
- 定义操作User对应users表的sql映射文件UserMapper.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="com.lion.test1.UserMapper">
<select id="selectUser" parameterType="int" resultType="com.lion.pojo.User">
select * from users where id = #{id}
</select>
</mapper> - 在mybatis配置文件mybatis-config.xml中注册映射文件UserMapper.xml (上面mybatis配置文件中注释掉内容,注意:注册映射文件使用的市文件的路径 / 而不是包路径 . )
<mappers>
<mapper resource="com/lion/test1/UserMapper.xml"/>
</mappers>
编写测试代码,执行映射文件中的查询
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
// 加载Mybatis的配置文件 同时也会加载映射文件
InputStream inputStream = Resources.getResourceAsStream(resource);
// 使用XML文件构建sqlSessionFacory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建能执行映射文件中sql的sqlSession
SqlSession session = sqlSessionFactory.openSession();
// 映射sql的标识字符串
String stament = "com.lion.test1.UserMapper.selectUser";
User user = session.selectOne(stament, 1);
System.out.println(user);
}
Console输出:
2018-05-16 23:48:27,714 [main] DEBUG [com.lion.test1.UserMapper.selectUser] - ==> Preparing: select * from users where id = ?
2018-05-16 23:48:27,867 [main] DEBUG [com.lion.test1.UserMapper.selectUser] - ==> Parameters: 1(Integer)
2018-05-16 23:48:27,956 [main] DEBUG [com.lion.test1.UserMapper.selectUser] - <== Total: 1
User [id=1, name=Tom, age=12]
解决字段名与实体类属性名不相同的冲突
两种方式解决,一种在sql中定义查询字段别名,另一种则是在映射文件中使用resultMap进行字段映射
方式一: 通过在sql语句中定义别名
<select id="selectOrder" parameterType="int" resultType="_Order">
select order_id id, order_no orderNo,order_price price from orders where order_id=#{id}
</select> 方式二: 通过<resultMap>
<select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap">
select * from orders where order_id=#{id}
</select> <resultMap type="_Order" id="orderResultMap">
<id property="id" column="order_id"/>
<result property="orderNo" column="order_no"/>
<result property="price" column="order_price"/>
</resultMap>
Mybatis简单入门的更多相关文章
- mybatis简单入门介绍
mybatis入门 简介 什么是mybatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及 ...
- Mybatis简单入门
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ...
- MyBatis 简单入门
添加maven 依赖 <dependencies> <dependency> <groupId>org.mybatis</groupId> <ar ...
- Mybatis简单入门--插入数据
1. 开发环境 IDE:IDEA 构建工具:maven4.0.0 MySQL版本:8.0.11. 记得创建好数据库 Mybatis版本:3.5.7 MySQL不同版本的注意事项 驱动类driver-c ...
- MyBatis学习总结(一)简单入门案例
MyBatis学习总结(一)简单入门案例 主要内容:本文主要通过对数据库中的use表进行增删改查总结mybatis的环境搭建和基本入门使用 一.需要的jar包: 1.核心包 2.依赖包 3.jdbc数 ...
- MyBatis学习总结(一)——MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis学习总结(一)——MyBatis快速入门(转载)
本文转载自http://www.cnblogs.com/jpf-java/p/6013537.html MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了 ...
- MyBatis入门学习教程-MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- MyBatis学习总结(一)——MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
随机推荐
- linux shell数据重定向
标准输入 (stdin) :代码为 0 ,使用 < 或 << :标准输出 (stdout):代码为 1 ,使用 > 或 >> :标准错误输出(stderr):代码为 ...
- luogu U41573 War2
一道NOIP2018模拟的DayT3 原本没打算做,结果Dukelv秒了(强的过分),就来看看. 状压dp.令dp[i][j]表示在状态 i ,最后选了第 j 个数是的最大分值. 所以我们枚举状态 i ...
- vue.js加入购物车小球动画
生成一个动画小球的div,并且生成五个小球,五个是为了生成一定数量的小球来作为操作使用,按照小球动画的速度,一般来说五个也可以保证有足够的小球数量来运行动画 动画的内容分别是外层和内层,外层控制动画小 ...
- 自定义的打印语句NSLog在控制台输出不完整的完美解决
// 打印日志 debug #ifdef DEBUG // 调试状态, 打开LOG功能 #define APPLog( s, ... ) printf("class: <%p %s:( ...
- web项目继承ServletContainerInitializer进行访问HttpServlet(WebServlet)
java使用web项目不需要加web.xml 配置javax.servlet.ServletContainerInitializer 1.在src目录创建META-INF,META-INF目录下创建s ...
- 【转载】iPhone屏幕尺寸、分辨率及适配
iPhone屏幕尺寸.分辨率及适配 转载http://m.blog.csdn.net/article/details?id=42174937 1.iPhone尺寸规格 iPhone 整机宽度Width ...
- java 中的懒汉单例和饿汉单例模式
//-------------------------------------------------------------饿汉模式--开始----------------------------- ...
- SpringBoot自动装配的原理
1.SpringApplication.run(AppConfig.class,args);执行流程中有refreshContext(context);这句话. 2.refreshContext(co ...
- iOS:SQL
iOS虽然也有SQL,不过用得少(至少我目前是这样).大数据直接丢给后台,小的用Plist足矣. 再退一步,有FMDB,原生的也用得少了. 下面是之前学SQL时候的笔记. 1.创建 1-1).打开: ...
- 数据库函数(Left、Right)
MySQL 字符串截取函数:left(), right(), substring(), substring_index().还有 mid(), substr().其中,mid(), substr() ...