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,'
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入门(一)---基本使用的内容,更多相关内容请关注PHP中文网(www.php.cn)!
推荐阅读
-
Laravel php 框架的使用写出第一个hello world,Laravel 入门配置
-
PHP IF ELSE简化/三元一次式的使用_php入门_脚本之家
-
Angular UI组件库入门指南 - 如何安装和开始使用(一) Angularkendo uitelerikUI控件
-
Spring Boot Mybatis 最基本使用mysql存储过程
-
SQLAlchemy的使用(一)--基本使用方法
-
mybatis:基于注解的环境搭建与基本使用
-
Mybatis第一天 入门
-
统一建模语言UML轻松入门之基本概念 UML活动领域模型数据结构PowerBuilder
-
Mybatis基础学习(一):通过Mybatis完成对数据库的基本CRUD操作
-
Vue.js之Vue-resource(一)vue-resource的基本使用方法