本文 粗浅 谈论Mybatis 只讲简单的使用方法
查询单条记录,查询多条记录,插入单条记录,更新单条记录,删除单条记录
环境配置
1)导包
maven管理器下的pom.xml文件
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.42</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>
2)数据库添加一个表
create TABLE user(
id int PRIMARY KEY NOT NULL,
name VARCHAR(20),
age INT
)
基本的环境已经弄好了下面就是如何使用mybatis
第一步
创建Mybatis的配置文件(用于加载数据库和定位sql配置文件位置)
创建一个conf.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?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 注册userMapper.xml文件,
userMapper.xml位于Mybatis这个包下,所以resource写成Mybatis/userMapper.xml-->
<mapper resource="Mybatis/userMapper.xml"/>
</mappers>
</configuration>
第二步
创建使用sql语句的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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
-->
<mapper namespace="Mybatis.userMapper">
<!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
resultType="Mybatis.User"就表示将查询结果封装成一个User类的对象返回
User类就是users表所对应的实体类
-->
<!--
根据id查询得到一个user对象
-->
<!--单查询 -->
<select id="getUser" parameterType="int"
resultType="Mybatis.User">
select * from users where age=#{age}
</select>
<!--多查询 -->
<select id="getUserList" parameterType="hashmap"
resultType="Mybatis.User">
select * from users
</select>
<!--插入 -->
<insert id="insertUser" parameterType="hashmap" >
insert into users(name,age)values(#{a},#{b})
</insert>
<!--更新 -->
<update id="updatetUser" parameterType="hashmap" >
update users name=#{a},age=#{a} where id=#{c}
</update>
<!--删除 -->
<delete id="deleteUser" parameterType="hashmap" >
delete from users where id = #{a}
</delete>
</mapper>
第三步
创建实体类(用于显示结果)
package Mybatis;
public class User {
//实体类的属性和表的字段名称一一对应
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
第四步
创建测试类
package Mybatis;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Test {
public static void main(String[] args) throws IOException {
//mybatis的配置文件
String resource = "Mybatis/conf.xml";
//使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
//使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
//Reader reader = Resources.getResourceAsReader(resource);
//构建sqlSession的工厂
//SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建能执行映射文件中sql的sqlSession
SqlSession session = sessionFactory.openSession();
/**
* 映射sql的标识字符串,
* Mybatis.userMapperr是userMapper.xml文件中mapper标签的namespace属性的值,
* getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
*/
String statement = "Mybatis.userMapper.getUserList";//映射sql的标识字符串
//执行查询返回多个值
Map m= new HashMap();
m.put("a", "赵五");
m.put("b", "123");
List<User> listBlog = session.selectList(statement, m);
for (User blog : listBlog) {
System.out.println(blog.getName()+blog.getId());
}
//插入
String statement2 = "Mybatis.userMapper.insertUser";
Map m2= new HashMap();
m2.put("a", "刘德华");//名字
m2.put("b", "22");//年龄
session.insert(statement2, m2);
session.commit();//insert改变数据库的操作 要进行提交!!!
//删除
String statement3 = "Mybatis.userMapper.deleteUser";
Map m3= new HashMap();
m3.put("a", "12");//根据ID删除
session.delete(statement3, m3);
session.commit();
session.close();//用完要关闭
}
}
这样 就可以测试,不需要哪个操作就把测试里的单个操作删除
以下是完整的文件(不包含maven的pom.xml)
===========================以下是理论部分========================
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。Mybatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。Mybatis使用简单的XML或注
解用于配置和原始映射,将接口和java的POJOs映射成数据库的记录。
MyBatis作为持久层框架,其主要思想是将程序中的大量sql语句剥离出来,配置在配置文件中,实现sql的灵活配置。这样做的好处是将sql与程序代码分离,可以在不修改程序
代码的情况下,直接在配置文件中修改sql。
总体来说 MyBatis 主要完成两件事情
根据 JDBC 规范建立与数据库的连接;
通过Annotaion/XML+JAVA反射技术,实现 Java 对象与关系数据库之间相互转化。