什么是MyBatis?
MyBatis 是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除
了几乎所有的 JDBC代码和参数的手工设置以及对结果集的检索。MyBatis 可以使用简单的
XML或注解用于配置和原始映射,将接口和Java的 POJO(Plain Old Java Objects,普通的
Java对象)映射成数据库中的记录。
怎么搭建myBatis环境呢?
1.首先准备数据库连接zar和mybatis jar包。
2.编写properties文件,存储数据库连接信息(mysql.properties)
username=root
password=root
url=jdbc:mysql://localhost:3306/chao_shop
driver=com.mysql.jdbc.Driver
3.然后编写mybatis核心的xml (mybatis.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="com/tfdc/excise/mysql.properties"></properties>
<!--类型别名是为Java类型命名一个短的名字。它只和XML配置有关,只用来减少类完全限定名的多余部分 -->
<typeAliases>
<package name="com.tfdc.shop.model"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 数据源的配置(比如:type=”POOLED”)-->
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!--这里引入实体对象的xml 我们操作对象的增删改查都在此文件内-->
<mappers>
<mapper resource="com/tfdc/shop/model/User.xml"/>
</mappers>
</configuration>
我们的实体对象
package com.tfdc.shop.model;
import java.util.List;
public class User {
private int id;
//用户名
private String username;
//密码
private String password;
//别名
private String nickname;
//是否禁用
private int type;
//地址
private List<Address> addresses;
public List<Address> getAddresses() {
return addresses;
}
public void setAddresses(List<Address> addresses) {
this.addresses = addresses;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String toString() {
return "User [id=" + id + ", username=" + username + ", password="
+ password + ", nickname=" + nickname + ", type=" + type
+ ", addresses=" + addresses + "]";
}
}
实体对象的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.tfdc.shop.model.User">
<insert id="add" parameterType="com.tfdc.shop.model.User" >
insert into t_user(username,password,nickname,type)
values(#{username},#{password},#{nickname},#{type})
</insert>
<update id="update" parameterType="com.tfdc.shop.model.User">
update t_user set password =#{password},nickname=#{nickname},type=#{type}
where id=#{id}
</update>
<delete id="delete" parameterType="int">
delete from t_user where id =#{id}
</delete>
<select id="selectOne" parameterType="int" resultType="User">
select * from t_user where id =#{id}
</select>
<select id="queryAll" resultType="User" >
select * from t_user
</select>
<select id="findbyName" resultType="User" parameterType="map">
select * from t_user
where (username like #{username} or nickname like #{nickname})
limit #{pageOffset},#{pageSize}
</select>
</mapper>
然后编写我们的测试类就好了,这里用了一个最简单的方法,代码冗余,也很多,当然我们也可以写一个工具类,用来管理session.
package com.tfdc.TestDemo;
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.tfdc.shop.model.User;
public class TestMybatis {
public static void main(String[] args) {
selectOne();
}
public static void addUser(){
String resource = "com/tfdc/excise/mybatis.xml";
Reader reader;
try {
reader = Resources.getResourceAsReader(resource);
SqlSessionFactory factory =new SqlSessionFactoryBuilder().build(reader);
SqlSession session =factory.openSession();
User user =new User();
user.setUsername("张1");
user.setPassword("123456");
user.setNickname("smallchao");
user.setType(1);
session.insert("com.tfdc.shop.model.User.add",user);
session.commit();
session.close();
System.out.println("-------增加成功--------");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void updateUser(){
String resource = "com/tfdc/excise/mybatis.xml";
Reader reader;
try {
reader = Resources.getResourceAsReader(resource);
SqlSessionFactory factory =new SqlSessionFactoryBuilder().build(reader);
SqlSession session =factory.openSession();
User user =new User();
user.setPassword("222222");
user.setNickname("xiaochao");
user.setType(0);
user.setId(6);
session.update("com.tfdc.shop.model.User.add",user);
session.commit();
session.close();
System.out.println("--------修改成功-------");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void deleteUser(){
String resource = "com/tfdc/excise/mybatis.xml";
Reader reader;
try {
reader = Resources.getResourceAsReader(resource);
SqlSessionFactory factory =new SqlSessionFactoryBuilder().build(reader);
SqlSession session =factory.openSession();
session.delete("com.tfdc.shop.model.User.delete",7);
session.commit();
session.close();
System.out.println("-------删除成功--------");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void selectOne(){
String resource = "com/tfdc/excise/mybatis.xml";
Reader reader;
try {
reader = Resources.getResourceAsReader(resource);
SqlSessionFactory factory =new SqlSessionFactoryBuilder().build(reader);
SqlSession session =factory.openSession();
User u =(User)session.selectOne("com.tfdc.shop.model.User.selectOne",7);
System.out.println(u);
session.close();
System.out.println("-------查询成功--------");
} catch (IOException e) {
e.printStackTrace();
}
}
}
这是我的工具类,可以减少部分代码冗余。
package com.tfdc.shop.util;
import java.io.IOException;
import java.io.InputStream;
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 MyBatisUtil {
private static SqlSessionFactory factory;
static {
try {
String resource = "com/tfdc/excise/mybatis.xml";
InputStream is = Resources.getResourceAsStream(resource);
factory = new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession createSession() {
return factory.openSession();
}
public static void closeSession(SqlSession session) {
if (session != null)
session.close();
}
}
每一个 MyBatis 的应 用程序 都以一 个 SqlSessionFactory 对象的 实例为 核
sessionFactory 对 象 的 实 例 可 以 通 过 SqlSessionFactoryBuilder 对 象 来 获
sessionFactoryBuilder 对象可以通过 XML 配置文件,或从以往使用惯例中准备
configuration 类实例中来构建SqlSessionFactory 对象。
只要拿到sessionFactory 构建的session 对象,我们就可以随心所欲的查询。