mybatis下载及环境搭建
jar包下载完成后将zip文件解压后文件如下:
打开 mybatis-3.5.2 文件夹将 mybatis-3.5.2.jar 导入至 java项目中;之后再导入一个版本对应的jdbc包即可
配置文件
环境搭建好后我们来配置config文档;再回到mybatis下载页面找到如下图xml格式的配置,将其复制并在项目中新建一个 config.xml 文件,将复制内容粘贴到 ***config.xml***中
配置后如下:
配置说明:
1、
<!--default="development" 指定连接的数据库配置信息为 id="development"-->
<environments default="development">
<environment id="development">...</environment>
</environments>
2、
<!--type="POOLED" 指定数据源类型-->
<!--POOLED:使用数据库连接池-->
<!--UNPOOLED:传统的JDBC模式,由代码直连数据库,每次访问均需要连接、关闭数据库-->
<!--JNDI:从tomcat中获取一个内置的数据库连接池-->
<dataSource type="POOLED">
</dataSource>
3、
<!--事务提交方式:-->
<!--JDBC:事务需要手动提交、回滚、关闭等-->
<!--MANAGED:将事务交由其他组件取托管(spring/jobss等),默认关闭连接;可通过<property name="closeConnection" value="false"/>取消默认关闭连接-->
<transactionManager type="JDBC"/>
示例
1、新建一个 person 表,表中包含 id,name,age 三个字段;往表中插入数据,如下图所示:
2、新建一个实体类 Person,属性与 person 表一 一对应
package com.mybatis.slq.entity;
public class Person {
private int id;
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person(int id,String name, int age) {
this.name = name;
this.age = age;
this.id=id;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
3、新建一个 personMapper.xml 文件;打开 mybatis-3.5.2.pdf 文件
找到如下图所示的xml格式的配置,复制到 personMapper.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.mybatis.slq.entity.personMapper">
<!--通過ID查詢單個Person(單一條件)-->
<select id="selectPersonById" resultType="com.mybatis.slq.entity.Person" parameterType="int">
select * from person where id = #{id}
</select>
<!--通過ID查詢單個Person(多個條件)-->
<select id="selectPersonById1" resultType="com.mybatis.slq.entity.Person" parameterType="com.mybatis.slq.entity.Person">
select * from person where id = #{id} and age=#{name}
</select>
<!--查詢全部Person-->
<select id="selectPersonAll" resultType="com.mybatis.slq.entity.Person">
select * from person
</select>
<!--添加Person-->
<select id="addPerson" resultType="int" parameterType="com.mybatis.slq.entity.Person">
insert into person(name,age) values(#{name},#{age})
</select>
<!--根據Id删除Person-->
<select id="deletePerson" parameterType="int">
delete from person where id = #{id}
</select>
<!--根據Id更新Person-->
<select id="updatePerson" parameterType="com.mybatis.slq.entity.Person">
update person set name=#{name},age=#{age} where id = #{id}
</select>
</mapper>
名词解释
namespace:命名空间,这里写 personMapper.xml 的完整路径(完整包名+文件名)
select 标签:指定该标签中的语句类型(还有update、delete、insert)
id:为该标签指定唯一标识
resultType:指定sql语句执行完成后的返回类型,返回的数据的每一笔都对应了一个 person 类(类与表一 一对应),如果只查询 name 也可以把 Person 的全类名换成 String 。
parameterType:传入参数,根据ID查询,所以传入类型 int ( id 的数据库类型为Int);根據Id更新Person,传入参数有多个,类型为 com.mybatis.slq.entity.Person(需为全类名)
测试
创建一个测试类
package com.mybatis.slq.entity;
import com.mybatis.slq.mapper.PersonMapper;
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 java.io.IOException;
import java.io.Reader;
import java.util.List;
public class TestDemo {
//根據Id查詢單個Person(單一條件)
public static void queryPersonById(SqlSession sqlSession,String statement,int id){
Person person=sqlSession.selectOne(statement,id);
System.out.println(person.toString());
}
//查詢全部Person
public static void queryPersonAll(SqlSession sqlSession,String statement){
List<Person> person=sqlSession.selectList(statement);
System.out.println(person.toString());
}
//添加Person
public static void addPerson(SqlSession sqlSession,String statement,Person person){
int row=sqlSession.insert(statement,person);
sqlSession.commit();
System.out.println("受影響行數: "+row);
}
//根据id删除Person
public static void deletePerson(SqlSession sqlSession,String statement,int id){
int row=sqlSession.delete(statement,id);
sqlSession.commit();
System.out.println("受影響行數: "+row);
}
//根据id更新Person
public static void updatePerson(SqlSession sqlSession,String statement,Person person){
int row=sqlSession.update(statement,person);
sqlSession.commit();
System.out.println("受影響行數: "+row);
}
public static void main(String[] args) throws IOException {
//两种获取SqlSession的方式
//方式一
// Reader reader=Resources.getResourceAsReader("config");
// SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// SqlSession sqlSession = sqlSessionFactory.openSession();
//方式二
InputStream inputStream=Resources.getResourceAsStream("config");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
//根據Id查詢單個人(單一條件)
String queryPersonById="com.mybatis.slq.entity.personMapper.selectPersonById";
queryPersonById(sqlSession,queryPersonById,2);
// //查詢全部Person
// String queryPersonAll="com.mybatis.slq.entity.personMapper.selectPersonAll";
// queryPersonAll(sqlSession,queryPersonAll);
// //添加Person
// String addPerson="com.mybatis.slq.entity.personMapper.addPerson";
// Person person=new Person("test2",15);
// addPerson(sqlSession,addPerson,person);
// //根據Id删除Person
// String deletePerson="com.mybatis.slq.entity.personMapper.deletePerson";
// deletePerson(sqlSession,deletePerson,2);
//根據Id更新Person
// String updatePerson="com.mybatis.slq.entity.personMapper.updatePerson";
// Person person=new Person(5,"test11",28);
// updatePerson(sqlSession,updatePerson,person);
}
}
结果: