先上项目截图:
项目框架如图
log4j.properties:
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
mybatis总配置文件(需先在数据库中创建对应DataBase和对应表并设置主键id自增)
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>
<typeAliases>
<typeAlias type="com.vina.pojo.People" alias="People"/>
</typeAliases>
<!-- 和spring整合后environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf-8&useSSL=false"/>
<property name="username" value="username" />
<property name="password" value="password" />
</dataSource>
</environment>
</environments>
<!--加载mapper文件-->
<mappers>
<!-- resource是基于classpath来查找的 -->
<mapper resource="com/vina/mapper/PeopleMapper.xml"/>
</mappers>
</configuration>
然后是通过单例模式获取SqlSession的SqlSessionFactoryutil.java
package com.vina.util;
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.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
//单例模式
public class SqlSessionFactoryUtil {
// SqlSessionFactory单例对象
private static SqlSessionFactory sqlSessionFactory = null;
// 类线程锁
public static final Class CLASS_LOCK = SqlSessionFactoryUtil.class;
// 私有化构造方法
private SqlSessionFactoryUtil(){ }
// 构建SqlSessionFactory
public static SqlSessionFactory initSqlSessionFactory(){
String resource = "com/vina/util/mybatis_config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
}catch (IOException e){
Logger.getLogger(SqlSessionFactoryUtil.class.getName()).log(Level.SEVERE, null, e);
}
if(sqlSessionFactory == null)
synchronized (CLASS_LOCK){
if(sqlSessionFactory == null)
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
return sqlSessionFactory;
}
// 打开SqlSession
public static SqlSession openSqlSession(){
if(sqlSessionFactory == null)
initSqlSessionFactory();
return sqlSessionFactory.openSession();
}
}
pojo类:
package com.vina.pojo;
public class People {
private long id;
private String name;
private int age;
@Override
public String toString() {
return "id:" + id + " name:" + name + " age:" + age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
People类的映射文件:
<?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.vina.mapper.PeopleMapper">
<!-- 根据id获取用户信息 -->
<select id="getPeople" parameterType="long" resultType="People">
select * from People where id = #{id}
</select>
<insert id="insertPeople" parameterType="People">
insert into People(`name`, age) values (#{name}, #{age})
</insert>
<delete id="deletePeople" parameterType="long">
delete from People where id = #{id}
</delete>
<delete id="deletePeopleFromName" parameterType="String">
delete from People where name = #{name}
</delete>
</mapper>
People类接口:
package com.vina.mapper;
import com.vina.pojo.People;
public interface PeopleMapper {
People getPeople(long id);
int deletePeople(long id);
int insertPeople(People people);
int deletePeopleFromName(String name);
}
最后是测试类:
package com.vina.main;
import com.vina.util.SqlSessionFactoryUtil;
import com.vina.mapper.PeopleMapper;
import com.vina.pojo.People;
import org.apache.ibatis.session.SqlSession;
public class PeopleDemo1 {
public static void main(String[] args) {
SqlSession sqlSession = null;
try {
sqlSession = SqlSessionFactoryUtil.openSqlSession();
PeopleMapper peopleMapper = sqlSession.getMapper(PeopleMapper.class);
People people = new People();
people.setAge(20);
people.setName("vina");
peopleMapper.insertPeople(people);
System.out.println(peopleMapper.getPeople(1L));
peopleMapper.deletePeopleFromName("vina");
sqlSession.commit();
} catch (Exception e){
System.err.println(e.getMessage());
sqlSession.rollback();
} finally {
if(sqlSession != null)
sqlSession.close();
}
}
}
总结:与纯粹的JDBC编程相比,减少了传统JDBC编程中的重复代码,并增加可代码的可读性和可重用性.并且代码逻辑也较为清晰.