mybatis简单实例 -- 初窥mybatis

先上项目截图:


项目框架如图

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编程中的重复代码,并增加可代码的可读性和可重用性.并且代码逻辑也较为清晰.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值