MyBatis入门(一)---基本使用
一、MyBatis简介
1.1、概述
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
1.2、ORM
orm工具的基本思想
无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:
1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.
2. 由sessionfactory 产生 session
3. 在session 中完成对数据的增删改查和事务提交等.
4. 在用完之后关闭session 。
5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
二、环境搭建
2.1、所需要Jar包
要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。
2.2、建立数据库与插入数据
这里使用MySql数据库:
CREATE TABLE `mybatis`.`user` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`name` VARCHAR(45) NOT NULL DEFAULT '无名氏' COMMENT '用户名',
`age` TINYINT(3) NOT NULL DEFAULT 21 COMMENT '用户年龄',
`birthday` DATETIME NOT NULL DEFAULT '1970-01-01 00:00:00' COMMENT '用户生日',
`address` VARCHAR(256) NOT NULL DEFAULT '北京' COMMENT '用户地址',
PRIMARY KEY (`id`) COMMENT '')
COMMENT = '用户表';
insert into user(id,name,age,birthday,address)
values(1,'张三',23,'1990-01-23 20:24:21','上海'),(2,'李四',18,'1986-12-23 12:13:11','广州'),(3,'张五',33,'1975-09-23 02:13:11','上海'),(4,'王六',27,'1984-11-01 11:23:14','重庆'),(5,'张三丰',108,'1971-01-02 02:12:11','武当');
2.3、建立Web项目把Jar包引入项目
三、建立配置文件,实体类,与接口
3.1、建立实体类
/** * @Title: User.java * @Package com.pb.mybatis.po * @Description: TODO(用户类) * @author 刘楠 * @date 2015-10-26 下午5:42:13 * @version V1.0 */
package com.pb.mybatis.po; import java.util.Date; /**
* @ClassName: User * @Description: TODO(用户类) * @author 刘楠 * @date 2015-10-26 下午5:42:13 * */
public class User { /**
* id(用户ID)
*/
private int id;
/**
* name(用户名)
*/
private String name;
/**
*age (用户年龄)
*/
private int age;
/**
* birthday(用户生日)
*/
private Date birthday;
/**
* address (用户地址)
*/
private String address;
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
/**
* @return the brithday
*/
public Date getBirthday() {
return brithday;
}
/**
* @param brithday the brithday to set
*/
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
/**
* @return the address
*/
public String getAddress() {
return address;
}
/**
* @param address the address to set
*/
public void setAddress(String address) {
this.address = address;
} }
3.2、写实体类接口
/** * @Title: UserMapper.java * @Package com.pb.mybatis.dao * @Description: TODO(用一句话描述该文件做什么) * @author 刘楠 * @date 2015-10-26 下午5:45:13 * @version V1.0 */
package com.pb.mybatis.dao; import com.pb.mybatis.po.User; /**
* @ClassName: UserMapper * @Description: TODO(用户类数据访问接口) * @author 刘楠 * @date 2015-10-26 下午5:45:13 * */
public interface UserMapper {
/**
*
* @Title: selectUserById * @Description: TODO(根据用户ID查询) * @param id
* @return User
*/
public User selectUserById(int id); }
3.3、与db.properties
db.properties
#数据库基本配置
#驱动
driver=com.mysql.jdbc.Driver
#连接url
url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8
#用户名
username=root
#密码
password=root
3.4、建立映射文件与configuration.xml配置
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命名空间要写接口的全路径 -->
<mapper namespace="com.pb.mybatis.dao.UserMapper">
<!--ID要与接口中的方法名相同 parameterType传入的参数类型 resultType 返回的类型这里也User类的全路径-->
<select id="selectUserById" parameterType="int" resultType="com.pb.mybatis.po.User">
select * from user
where id=#{id}
</select>
</mapper>
configuration.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>
<!-- 加载资源文件 -->
<properties resource="db.properties"/>
<!--配置环境 -->
<environments default="development">
<environment id="development">
<!--事务管理 -->
<transactionManager type="JDBC"/>
<!--数据源 通过Properties加载配置 -->
<dataSource type="POOLED">
<!--驱动driver -->
<property name="driver" value="${driver}"/>
<!--连接URL -->
<property name="url" value="${url}"/>
<!--用户名 -->
<property name="username" value="${username}"/>
<!--密码 -->
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--建立映射 -->
<mappers>
<mapper resource="com/pb/mybatis/dao/UserMapper.xml"/>
</mappers>
</configuration>
3.5、简单根据ID查询
/** * @Title: Test1.java * @Package com.pb.mybatis.test * @Description: TODO(用一句话描述该文件做什么) * @author 刘楠 * @date 2015-10-26 下午5:55:54 * @version V1.0 */
package com.pb.mybatis.test; import java.io.IOException;
import java.io.Reader; 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 com.pb.mybatis.dao.UserMapper;
import com.pb.mybatis.po.User; /**
* @ClassName: Test1 * @Description: TODO(测试类) * @author 刘楠 * @date 2015-10-26 下午5:55:54 * */
public class Test1 {
//Session工厂
static SqlSessionFactory sqlSessionFactory=null;
//Session
static SqlSession session=null;
//字符流
static Reader reader=null; public static void main(String[] args) { selectById();
}
/**
*
* @Title: selectById * @Description: TODO(根据ID查找用户)
void
*/
public static void selectById(){
//加载配置文件
try {
reader=Resources.getResourceAsReader("configuration.xml");
//建立SqlSessionFactory
sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
//打开Session
session=sqlSessionFactory.openSession();
//获取用户接口对象
UserMapper userMapper=session.getMapper(UserMapper.class);
//调用查询方法
User user=userMapper.selectUserById(1);
System.out.println(user.getName()+"..."+user.getAge()+"..."+user.getBirthday().toLocaleString()+"..."+user.getAddress());
} catch (IOException e) {
e.printStackTrace();
} } }
3.6、使用别名
<!--使用别名 -->
<typeAliases>
<!--用户类别名 -->
<typeAlias type="com.pb.mybatis.po.User" alias="User"/>
</typeAliases>
更改mapper.xml中的User类的路径 为别名
<?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命名空间要写接口的全路径 -->
<mapper namespace="com.pb.mybatis.dao.UserMapper">
<!--ID要与接口中的方法名相同 parameterType传入的参数类型 resultType 返回的类型这里也User类的全路径-->
<select id="selectUserById" parameterType="int" resultType="User">
select * from user
where id=#{id}
</select>
</mapper>
测试类不变
3.7、使用resultMap
在mapper.xml中使用resultMap
<?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命名空间要写接口的全路径 -->
<mapper namespace="com.pb.mybatis.dao.UserMapper"> <!--结果映射 不区另大小写,建议数据库的列写为大写 -->
<resultMap type="User" id="userMap">
<!--主键 -->
<id property="id" column="ID"/>
<!--姓名 -->
<id property="name" column="NAME"/>
<!--年龄 -->
<id property="age" column="AGE"/>
<!--生日 -->
<id property="birthday" column="BIRTHDAY"/>
<!--地址 -->
<id property="address" column="ADDRESS"/>
</resultMap> <!--ID要与接口中的方法名相同 parameterType传入的参数类型 resultType 返回的类型这里也User类的全路径或者类的别名, resultMap写已经有的映射2都只能同时有一个-->
<select id="selectUserById" parameterType="int" resultMap="userMap">
select * from user
where id=#{id}
</select>
</mapper>
测试类不变
四、实现基本的增、删、改、查
4.1、在接口中增加,模糊查询,添加,修改,删除的方法,
/** * @Title: UserMapper.java * @Package com.pb.mybatis.dao * @Description: TODO(用一句话描述该文件做什么) * @author 刘楠 * @date 2015-10-26 下午5:45:13 * @version V1.0 */
package com.pb.mybatis.dao; import java.util.Date;
import java.util.List; import com.pb.mybatis.po.User; /**
* @ClassName: UserMapper * @Description: TODO(用户类数据访问接口) * @author 刘楠 * @date 2015-10-26 下午5:45:13 * */
public interface UserMapper {
/**
*
* @Title: selectUserById * @Description: TODO(根据用户ID查询) * @param id
* @return User
*/
public User selectUserById(int id); /**
*
* @Title: selectUserLikeName * @Description: TODO(根据姓名模糊查询) * @param name
* @return List<User>
*/
public List<User> selectUserLikeName(String name); /**
*
* @Title: addUser * @Description: TODO(添加用户) * @param user void
*/
public void addUser(User user);
/**
*
* @Title: updateUser * @Description: TODO(修改用户) * @param user void
*/
public void updateUser(User user);
/**
*
* @Title: deleteUser * @Description: TODO(删除用户) * @param id void
*/
public void deleteUser(int id);
}
4.2、在mapper.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命名空间要写接口的全路径 -->
<mapper namespace="com.pb.mybatis.dao.UserMapper"> <!--结果映射 不区另大小写,建议数据库的列写为大写 -->
<resultMap type="User" id="userMap">
<!--主键 -->
<id property="id" column="ID"/>
<!--姓名 -->
<id property="name" column="NAME"/>
<!--年龄 -->
<id property="age" column="AGE"/>
<!--生日 -->
<id property="birthday" column="BIRTHDAY"/>
<!--地址 -->
<id property="address" column="ADDRESS"/>
</resultMap> <!--ID要与接口中的方法名相同 parameterType传入的参数类型 resultType 返回的类型这里也User类的全路径或者类的别名, resultMap写已经有的映射2都只能同时有一个-->
<select id="selectUserById" parameterType="int" resultMap="userMap">
select * from user
where id=#{id}
</select>
<!--根据姓名模糊查询 -->
<select id="selectUserLikeName" parameterType="String" resultMap="userMap">
select * from user
where name like "%"#{name}"%"
</select> <!--添加用户 useGeneratedKeys使用数据的增序列 keyProperty将增加后的用户ID返回-->
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into user(name,age,birthday,address)
values(#{name},#{age},#{birthday},#{address})
</insert>
<!--修改更新 -->
<update id="updateUser" parameterType="User">
update user set name=#{name},age=#{age},birthday=#{birthday},address=#{address}
where id=#{id}
</update>
<!--删除 -->
<delete id="deleteUser" parameterType="int">
delete from user
where id=#{id}
</delete>
</mapper>
4.3、测试类
/** * @Title: Test1.java * @Package com.pb.mybatis.test * @Description: TODO(用一句话描述该文件做什么) * @author 刘楠 * @date 2015-10-26 下午5:55:54 * @version V1.0 */
package com.pb.mybatis.test; import java.io.IOException;
import java.io.Reader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List; 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 com.pb.mybatis.dao.UserMapper;
import com.pb.mybatis.po.User; /**
* @ClassName: Test1
*
* @Description: TODO(测试类)
*
* @author 刘楠
*
* @date 2015-10-26 下午5:55:54
*
*
*/
public class Test1 {
// Session工厂
static SqlSessionFactory sqlSessionFactory = null;
// Session
static SqlSession session = null;
// 字符流
static Reader reader = null; public static void main(String[] args) { } /**
*
* @Title: selectById
*
* @Description: TODO(根据ID查找用户) void
*/
public static void selectById() {
// 加载配置文件
try {
reader = Resources.getResourceAsReader("configuration.xml");
// 建立SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 打开Session
session = sqlSessionFactory.openSession();
// 获取用户接口对象
UserMapper userMapper = session.getMapper(UserMapper.class);
// 调用查询方法
User user = userMapper.selectUserById(1);
System.out.println(user.getName() + "..." + user.getAge() + "..."
+ user.getBirthday().toLocaleString() + "..."
+ user.getAddress());
} catch (IOException e) {
e.printStackTrace();
} } /**
*
* @Title: selectLikeName
*
* @Description: TODO(根据用户名模糊查询) void
*/
public static void selectLikeName() {
// 加载配置文件
try {
reader = Resources.getResourceAsReader("configuration.xml");
// 建立SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 打开Session
session = sqlSessionFactory.openSession();
// 获取用户接口对象
UserMapper userMapper = session.getMapper(UserMapper.class);
// 调用查询方法
List<User> users = userMapper.selectUserLikeName("张");
for (User user : users) {
System.out.println(user.getName() + "..." + user.getAge()
+ "..." + user.getBirthday().toLocaleString() + "..."
+ user.getAddress());
}
} catch (IOException e) {
e.printStackTrace();
} }
/**
*
* @Title: addUser * @Description: TODO(添加用户)
void
*/
public static void addUser() {
// 加载配置文件
try {
reader = Resources.getResourceAsReader("configuration.xml");
// 建立SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 打开Session
session = sqlSessionFactory.openSession();
// 获取用户接口对象
UserMapper userMapper = session.getMapper(UserMapper.class);
// 声明新用户
User user =new User();
user.setName("呵呵");
user.setAge(22);
String d="1984-09-23 20:23:22";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
Date date=sdf.parse(d);
user.setBirthday(date);
user.setAddress("不知道是哪的");
userMapper.addUser(user);
System.out.println("插入后的ID"+user.getId());
//提交事务
session.commit();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
/**
*
* @Title: updateUser * @Description: TODO(修改用户)
void
*/
public static void updateUser() {
// 加载配置文件
try {
reader = Resources.getResourceAsReader("configuration.xml");
// 建立SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 打开Session
session = sqlSessionFactory.openSession();
// 获取用户接口对象
UserMapper userMapper = session.getMapper(UserMapper.class);
// 调用查询方法
User user = userMapper.selectUserById(6);
user.setName("想起 来叫什么了");
user.setAddress("魔都上海");
//更新
userMapper.updateUser(user);
//提交事务
session.commit();
} catch (IOException e) {
e.printStackTrace();
} }
public static void detleUser() {
// 加载配置文件
try {
reader = Resources.getResourceAsReader("configuration.xml");
// 建立SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 打开Session
session = sqlSessionFactory.openSession();
// 获取用户接口对象
UserMapper userMapper = session.getMapper(UserMapper.class); //删除
userMapper.deleteUser(6);
//提交事务
session.commit();
} catch (IOException e) {
e.printStackTrace();
} }
}
MyBatis入门(一)---基本使用的更多相关文章
- MyBatis1:MyBatis入门
MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence fra ...
- mybatis入门基础(二)----原始dao的开发和mapper代理开发
承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...
- MyBatis入门基础(一)
一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记 ...
- MyBatis入门案例、增删改查
一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...
- mybatis入门_mybatis基本原理以及入门程序
一.传统jdbc存在的问题 1.创建数据库的连接存在大量的硬编码, 2.执行statement时存在硬编码. 3.频繁的开启和关闭数据库连接,会严重影响数据库的性能,浪费数据库的资源. 4.存在大量的 ...
- MyBatis入门学习教程-使用MyBatis对表执行CRUD操作
上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...
- MyBatis入门学习(二)
在MyBatis入门学习(一)中我们完成了对MyBatis简要的介绍以及简单的入门小项目测试,主要完成对一个用户信息的查询.这一节我们主要来简要的介绍MyBatis框架的增删改查操作,加深对该框架的了 ...
- MyBatis入门学习(一)
一.MyBatis入门简要介绍(百科) MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyB ...
- MyBatis入门案例 增删改查
一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...
- MyBatis入门(五)---延时加载、缓存
一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ****** ...
随机推荐
- CSS实例
CSS 实例 CSS背景 设置页面的背景颜色 设置不同元素的背景颜色 设置一个图像作为页面的背景 错误的的背景图片 如何在水平方向重复背景图像 如何定位背景图像 一个固定的背景图片(这个图片不会随页面 ...
- Visual Studio 2013 Preview对C++11的支持
为期3天的微软Build 2013大会结束了,作为微软一年一度的开发者大会,微软也做足了功夫:很多产品(包括Windows 8.1和Visual Studio 2013 Preview)发布,chan ...
- UML系列03之 UML类图(二)
概要 在"UML系列02之 UML类图(一) "中介绍了类图的基本构成--类的UML表示方法.本文是接着前文,继续对"UML的类图"中几种关系进行介绍.介绍的主 ...
- [Math] Deferred Acceptance Algorithm
约会配对问题 一.立即接受算法: 对于约会的配对,大家都去追自己最心仪的女生.而这个女生面对几位追求者,要立刻做个决定. 被拒绝的男生们调整一下心情,再去追求心中的 No. 2.以此类推. 这样做法有 ...
- Awk by Example--转载
原文地址: http://www.funtoo.org/Awk_by_Example,_Part_1?ref=dzone http://www.funtoo.org/Awk_by_Example,_P ...
- Linux的段错误调试方法
linux段错误的调试方法 相关博文: http://blog.csdn.net/htianlong/article/details/7439030 http://www.cnblogs.com/pa ...
- mysql中如何把字符串转换成日期类型
select date_format('2013-03-09','%Y-%m-%d'); select date_format('2013-03-09','%y-%m-%d'); select STR ...
- ok6410 android driver(3)
This article discusses the Makefile and how to port the module to different platform (localhost and ...
- 安装 Oracle P6 EPPM 16 R1 database for 12C
. 打开命令提示符(Windows)或 终端(如果UNIX)和连接数据库使用以下命令: sqlplus sys/password@dbservicename as sysdba 连接到: sqlplu ...
- Ext.NET 4.1.0 GridPanel数据分页
针对大量数据在前端展示,需要进行分页显示,这里我使用的数据量为100万,数据存储在MongoDb中(也可以存储在本地文件或其它数据库中).最终显示效果如下: 步骤如下: 1.新建程序并配置,详见htt ...