Mybatis案例
MyBatis
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。 MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO( Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录.
mybatis提供一种“半自动化”的ORM实现。
这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及 SQL 的自动生成和执行。
而mybatis的着力点,则在于POJO与SQL之间的映射关系。
需要的jar包:

mybatis需要jar包:mybatis-3.3.0.jar
mysql驱动jar包:mysql-connector-java-5.1.15.-bin.jar
日志记录jar包:log4j.jar
User.java
package com.kangjie.bean;
import java.util.Date;
public class User {
private String id;
private String name;
private String gender;
private Date birthday;
private String cellphone;
private String email;
private String hobby;
private String type;
private String description;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getCellphone() {
return cellphone;
}
public void setCellphone(String cellphone) {
this.cellphone = cellphone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
创建方法接口UserMapper.java和定义操作user表的sql映射文件UserMapper.xml
package com.kangjie.mapper;
import java.util.List;
import com.kangjie.bean.User;
public interface UserMapper {
/**
*
* @param user
* @return
* @throws Exception
*/
public int addUser(User user) throws Exception;
public int updateUser(User user) throws Exception;
public int deleteUser(String id) throws Exception;
public int findUserByID(String id) throws Exception;
public List<User> getAllUser() throws Exception;
}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kangjie.mapper.UserMapper">
<!-- 自定义结果返回集 -->
<resultMap type="User" id="userMap">
<id property="id" column="id" javaType="java.lang.String"></id>
<result property="name" column="name" javaType="java.lang.String"></result>
<result property="gender" column="gender" javaType="java.lang.String"></result>
<result property="birthday" column="birthday" javaType="java.util.Date"></result>
<result property="cellphone" column="cellphone" javaType="java.lang.String"></result>
<result property="email" column="email" javaType="java.lang.String"></result>
<result property="hobby" column="hobby" javaType="java.lang.String"></result>
<result property="type" column="type" javaType="java.lang.String"></result>
<result property="description" column="description" javaType="java.lang.String"></result>
</resultMap>
<!-- 标签中的id属性必须和接口中的方法名相同,id必须唯一 -->
<!-- keyProperty:仅对insert有效,MyBatis通过getGeneratedKeys或者通过insert语句的selectKey 子元素设置它的值 -->
<insert id="addUser" useGeneratedKeys="true" keyProperty="id">
insert into teacher (id,name,gender,birthday,cellphone,email,hobby,type,description) values (#{id},#{name},#{gender},#{birthday},#{cellphone},#{email},#{hobby},#{type},#{description})
</insert> </mapper>
为mybatis.cfg.xml里注册UserMapper.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="dbcfg.properties"></properties>
<!-- 为Java Bean起别名-->
<typeAliases>
<typeAlias type="com.kangjie.bean.User" alias="User"/>
</typeAliases> <!-- 配置mybatis运行环境 -->
<environments default="cybatis"> <environment id="cybatis">
<!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
<transactionManager type="JDBC" />
<!-- mybatis提供了3种数据源类型,分别是POOLED,UNPOOL,JNDI -->
<!-- POOLED 表示支持JDBC数据源连接池 -->
<!-- UNPOOLED 表示不支持数据源连接池 -->
<!-- JNDI 表示支持外部数据源连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
<!-- </transactionManager> -->
</environment>
</environments> <mappers>
<!-- 告知映射文件方式 -->
<!-- <package name="com/kangjie/mapper/UserMapper.xml"/> -->
<mapper resource="com/kangjie/mapper/UserMapper.xml"/>
</mappers>
</configuration>
创建工具类
package com.kangjie.tools; 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; public class DBTools { public static SqlSessionFactory sessionFactory;
static{
try {
//使用MyBatis提供的Resource类加载mybaits的配置文件
// Reader reader = Resources.getResourceAsReader("/MyBatis/src/mybatis.cfg.xml");
Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
//构建sqlsession工厂
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} //创建能执行映射文件中的sql的sqlSession
public static SqlSession getSession(){
return sessionFactory.openSession();
}
}
测试插入数据
package com.kangjie.service; import java.util.Date; import org.apache.ibatis.session.SqlSession; import com.kangjie.bean.User;
import com.kangjie.mapper.UserMapper;
import com.kangjie.tools.DBTools; public class UserService { public static void main(String[] args) {
addUser();
} private static void addUser() {
// TODO Auto-generated method stub
SqlSession session = DBTools.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = new User();
user.setId("");
user.setName("wang");
user.setGender("");
user.setBirthday(new Date());
user.setCellphone("");
user.setDescription("do what I want , when I want");
user.setEmail("67556677@qq.com");
user.setHobby("a have fun");
user.setType("vip"); try {
mapper.addUser(user);
session.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
session.rollback();
}
}
}
Mybatis案例的更多相关文章
- 用Intellij IDEA建mybatis案例
用IDEA建mybatis案例 环境准备: 首先,建库建表(最好用navicat或sqlpro直接导) 然后打开IDEA, 1. java--->javaEE---> java app-- ...
- Mybatis案例超详解(上)
Mybatis案例超详解(上) 前言: 本来是想像之前一样继续跟新Mybatis,但由于种种原因,迟迟没有更新,快开学了,学了一个暑假,博客也更新了不少,我觉得我得缓缓,先整合一些案例练练,等我再成熟 ...
- Mybatis案例升级版——小案例大道理
纯Mybatis案例升级版——小案例大道理 前言: 这几天看了一本书<原则>,在上面看到了一句话叫“每个人都把自己眼界的局限当成世界的局限”,大学生是
- SpringBoot整合Mybatis案例
SpringBoot整合Mybatis案例 2019/7/15以实习生身份入职公司前端做Angular ,但是感觉前途迷茫,于是乎学习一下Java的框架——SpringBooot. 参照大神博客:ht ...
- 关于CKEditor4.5.6的使用,自定义toolbar配置,上传图片案例(SpringMVC+MyBatis案例),自定义行高,去编辑器的中内容,将编辑器中内容设置到指定的位置等
关于CKEditor的一个配置整理,改文件为config.js: 文件内容如下: /** * @license Copyright (c) 2003-2016, CKSource - Frede ...
- MyBatis案例&增删改查
一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...
- Spring Framework自动装配setAutowireMode和Mybatis案例的源码探究
由前文可得知, Spring Framework的自动装配有两种方式:xml配置和注解配置: 自动装配的类型有: (1)xml配置中的byType根据类型查找(@Autowired注解是默认根据类型查 ...
- Spring整合Mybatis案例,献给初学的朋友
今天我们来学习Spring整合Mybatis. 开发环境:Ide:MyEclipse 2017 CI JDK:1.8 首先我们简单的认识下这两个框架 1.Mybatis MyBatis是一个支持普通S ...
- 003 SpringBoot整合SpringMVC、Mybatis 案例
1.不使用骨架创建一个maven工程 2.修改POM.xml文件 <?xml version="1.0" encoding="UTF-8"?> &l ...
随机推荐
- JPA--联合主键
联合主键的一些知识: 使用@EmbeddedId标示联合主键: 在联合主键类中只是定义确定联合主键的字段即可: * 联合主键类的规则 * 1.必须包含一个无参的构造函数 * 2.必须实现序列化接口 * ...
- Ext入门学习系列(四)面板控件
第四章 使用面板 上节学习了Ext复杂对话框,更进一步了解了Ext的运行机制.本章重点来了解Ext所有控件的基础——面板控件. 一.Ext的面板是什么? 同样先来看看几个效果: 基本面板,点击右上角小 ...
- android studio 使用的一些注意,一些报错的解决方法(原创)
NDK 编译无法通过 注意看 build.gradle 里面的 有些是 ndk-build windows 上用 ndk-build.cmd Summary: gradle calls ndk-bui ...
- Travel(HDU 4284状压dp)
题意:给n个城市m条路的网图,pp在城市1有一定的钱,想游览这n个城市(包括1),到达一个城市要一定的花费,可以在城市工作赚钱,但前提有工作证(得到有一定的花费),没工作证不能在该城市工作,但可以走, ...
- (一)NUnit单元测试心得
由于各种缘由,一本<.Net单元测试艺术>突然出现在了我的办公桌上,于是我的单元测试之路就此开始.通过一两个月不间断的学习,以及不断结合具体的项目做开发,再结合书上的知识对单元测试有了一些 ...
- mssql server 2005还原数据库bak文件与“备份集中的数据库备份与现有的xx数据库不同”解决方法
mssql server 2005还原数据库bak文件,网站使用虚拟主机建站会经常遇到,一般情况下,主机商有在线的管理程序,但有时候没有的话,就需要本地还原备份sql数据库了.这种情况mssql se ...
- theano学习指南5(翻译)- 降噪自动编码器
降噪自动编码器是经典的自动编码器的一种扩展,它最初被当作深度网络的一个模块使用 [Vincent08].这篇指南中,我们首先也简单的讨论一下自动编码器. 自动编码器 文献[Bengio09] 给出了自 ...
- Android编译过程详解(一)
Android编译过程详解(一) 注:本文转载自Android编译过程详解(一):http://www.cnblogs.com/mr-raptor/archive/2012/06/07/2540359 ...
- Thinking in Java
今天无意中看到了这本书(Thinking in Java)的中关于多态的一段描述,瞬间就感觉到了多态原来是这样的.
- 第十一章、认识与学习 BASH 数据流重导向
数据流重导向就是将某个命令运行后应该要出现在屏幕上的数据, 给它导向到其他的地方,例如文件或者是装置 (例如打印机之类的)! 什么是数据流重导向 命令运行过程如下: 图 5.1.1.命令运行过程的数据 ...