作为一个程序员,第一个接触的orm框架就是hibernate,使用了很长时间。可是正是应为使用这个,让自己所学习的sql置于了一个很尴尬的地方,程序开发很少直接接触,却又不能够放弃。好在发现了mybiats 。相比于hibernate,mybatis可以说是灵活小巧了,因此也就很容易上手。我想正是因为它的小巧,在官网上则可以很容易的查找到它的中文文档,这对对于英文不怎么样的我来说不得不说是一个好消息.如果不知道他的中文参考文档请猛戳这里:http://mybatis.github.io/mybatis-3/zh/index.html.学习了mybatis也有一段时间了,总的来说就是mybatis可以提高程序在dao层的灵活性与性能,但是在开发效率上还是觉得hibernate比较高.
接下来就写一个简单的小例子算是入门吧。首先嘛当然创建一个maven项目了。然后在pom文件中添加mybatis与mysql,已以及测试的依赖配置了
,然后依照它的官方文档添加mybatis-config.xml与PersonMapper.xml了。
因为mybatis是用于操作数据库的,所以则需要配置连接数据库的数据源以及事务管理了,这些东西都可以直接从官方文档中拿过来.
个人比较喜欢将数据库的信息写在配置文件中,然后再引入。
然后是实体bean 的映射文件
<?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="Person">
<insert id="insert" parameterType="Person" useGeneratedKeys="true" keyColumn="id">
insert into t_person(age,name)values(#{age},#{name});
</insert>
</mapper>
这里采用主键自动增长。
然后编写添加的代码
package com.mybatis.crud;
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;
import com.mybatis.bean.Person;
public class MyBatisCRUD {
public static SqlSessionFactory sqlSessionFactory;
static{
String resource = "mybatis-config.xml";
InputStream inputStream;
try {
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//添加
public void add(){
Person person=new Person();
person.setAge(20);
person.setName("宇智波鼬");
SqlSession sqlSession=sqlSessionFactory.openSession();
int count=sqlSession.insert("Person.insert", person);
sqlSession.commit();
System.out.println(count);
}
}
这里利用mybatis提供Resource从xml中构建sqlsessionFactory,这一块代码可以直接从文档中copy过来,因为测试的原因,我将其写在的静态代码块中。这里要注意的是事务是默认开启的,必须手动提交,也就是 SqlSession.comit();sqlSession.insert的第一个参数是映射文件的namespace+要引用sql的id。
<span style="font-size:24px;">最后编写测试代码:</span>
package com.mybatis.test;
import org.junit.Test;
import com.mybatis.crud.MyBatisCRUD;
import com.sun.swing.internal.plaf.metal.resources.metal;
public class MybatisTest {
@Test
public void addTest(){
MyBatisCRUD myBatisCRUD=new MyBatisCRUD();
myBatisCRUD.add();
}
}
然后测试,就可以查看数据库了.
OK。那么接下来就是更新 删除 修改了.
下面是完整的代码与配置文件
POM文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.maven.ibatis</groupId>
<artifactId>MybatisStudy</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>MybatisStudy Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.7</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
</dependency>
</dependencies>
<build>
<finalName>MybatisStudy</finalName>
</build>
</project>
mybatis-config.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"></properties>
<typeAliases>
<typeAlias type="com.mybatis.bean.Person" alias="Person"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
<mappers>
<mapper resource="com/mybatis/PersonMapper.xml"/>
</mappers>
</configuration>
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="Person">
<insert id="insert" parameterType="Person" useGeneratedKeys="true" keyColumn="id">
insert into t_person(age,name)values(#{age},#{name});
</insert>
<update id="update" parameterType="Person">
update t_person set name=#{name},age=#{age} where id=#{id}
</update>
<select id="list" resultType="Person">
select * from t_person
</select>
<select id="findbyid" resultType="Person">
select * from t_person where id=#{id}
</select>
<delete id="delete">
delete from t_person where id=#{id}
</delete>
</mapper>
MybatisCURD.java
package com.mybatis.crud;
import java.io.IOException;
import java.io.InputStream;
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 org.omg.CORBA.PUBLIC_MEMBER;
import com.mybatis.bean.Person;
public class MyBatisCRUD {
public static SqlSessionFactory sqlSessionFactory;
static{
String resource = "mybatis-config.xml";
InputStream inputStream;
try {
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//添加
public void add(){
Person person=new Person();
person.setAge(20);
person.setName("宇智波鼬");
SqlSession sqlSession=sqlSessionFactory.openSession();
int count=sqlSession.insert("Person.insert", person);
sqlSession.commit();
System.out.println(count);
}
//更新
public void edit(){
Person person=new Person();
person.setId(1);
person.setAge(22);
person.setName("卡卡西");
SqlSession sqlSession=sqlSessionFactory.openSession();
int count=sqlSession.update("Person.update", person);
sqlSession.commit();
System.out.println(count);
}
//根据条件查询
public void findbyCond(){
SqlSession sqlSession=sqlSessionFactory.openSession();
Person person=sqlSession.selectOne("Person.findbyid", 1);
System.out.println(person);
}
//列表查询
public void list(){
SqlSession sqlSession=sqlSessionFactory.openSession();
List<Person> list=sqlSession.selectList("Person.list");
for (Person person : list) {
System.out.println(person);
}
}
//删除
public void delete(){
SqlSession sqlSession=sqlSessionFactory.openSession();
int i=sqlSession.delete("Person.delete",1);
sqlSession.commit();
System.out.println(i);
}
}
mybatisTest.java
package com.mybatis.test;
import org.junit.Test;
import com.mybatis.crud.MyBatisCRUD;
import com.sun.swing.internal.plaf.metal.resources.metal;
public class MybatisTest {
@Test
public void addTest(){
MyBatisCRUD myBatisCRUD=new MyBatisCRUD();
myBatisCRUD.add();
}
@Test
public void updateTest(){
MyBatisCRUD myBatisCRUD=new MyBatisCRUD();
myBatisCRUD.edit();
}
@Test
public void findByCondTest(){
MyBatisCRUD myBatisCRUD=new MyBatisCRUD();
myBatisCRUD.findbyCond();
}
@Test
public void listTest(){
MyBatisCRUD myBatisCRUD=new MyBatisCRUD();
myBatisCRUD.list();
}
@Test
public void deleteTest(){
MyBatisCRUD myBatisCRUD=new MyBatisCRUD();
myBatisCRUD.delete();
}
}