兩種方式(xml+代碼)構建SqlSessionFactory+完整實現


首先創建類、接口、數據庫:

entity包下Admin類:
package com.wbg.springJavaConfig.entity;

public class Admin {
    private int aId;
    private String aAccount;
    private String aPassword;
    private String aRank;

    public Admin(int aId, String aAccount, String aPassword, String aRank) {
        this.aId = aId;
        this.aAccount = aAccount;
        this.aPassword = aPassword;
        this.aRank = aRank;
    }

    public int getaId() {
        return aId;
    }

    public void setaId(int aId) {
        this.aId = aId;
    }

    public String getaAccount() {
        return aAccount;
    }

    public void setaAccount(String aAccount) {
        this.aAccount = aAccount;
    }

    public String getaPassword() {
        return aPassword;
    }

    public void setaPassword(String aPassword) {
        this.aPassword = aPassword;
    }

    public String getaRank() {
        return aRank;
    }

    public void setaRank(String aRank) {
        this.aRank = aRank;
    }

    @Override
    public String toString() {
        return "Admin{" +
                "aId=" + aId +
                ", aAccount='" + aAccount + '\'' +
                ", aPassword='" + aPassword + '\'' +
                ", aRank='" + aRank + '\'' +
                '}';
    }
}
View Code

 dao包下的AdminDao接口

public interface AdminDao {
   
    List<Admin> listAll();
    Admin getById(int aId);
}
View Code

service包下AdminService 

public interface AdminService {
    List<Admin> listAll();

    Admin getById(int aId);
}
View Code

impl包下AdminServiceImpl

public class AdminServiceImpl implements AdminService {

    @Override
    public List<Admin> listAll() {
        return null;
    }

    @Override
    public Admin getById(int aId) {
        return null;
    }
}
View Code

一、使用xml構建SqlSessionFactory

 <!-- 數據庫連接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="org.mariadb.jdbc.Driver" />
        <property name="jdbcUrl" value="jdbc:mariadb://localhost:3306/wbg_logistics" />
        <property name="user" value="root" />
        <property name="password" value="123456" />

        <!-- c3p0連接池的私有屬性 -->
        <property name="maxPoolSize" value="30" />
        <property name="minPoolSize" value="10" />
        <!-- 關閉連接后不自動commit -->
        <property name="autoCommitOnClose" value="false" />
        <!-- 獲取連接超時時間 -->
        <property name="checkoutTimeout" value="10000" />
        <!-- 當獲取連接失敗重試次數 -->
        <property name="acquireRetryAttempts" value="2" />
    </bean>

    <!-- 配置SqlSessionFactory對象 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入數據庫連接池 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
        <property name="configLocation" value="classpath:mybatis-config.xml" />
        <!-- 掃描entity包 使用別名 -->
        <property name="typeAliasesPackage" value="com.wbg.springJavaConfig.dao" />
        <!-- 掃描sql配置文件:mapper需要的xml文件 -->
        <property name="mapperLocations" value="classpath:mapper/*.xml" />
    </bean>
View Code

二、使用代碼構建SqlSessionFactory

第一步:配置DataSource

有三種方式,推薦使用C3p0

 /**
     * C3p0的連接池
     * @return
     * @throws PropertyVetoException
     */
   @Bean
    public DataSource getC3p0DataSource() throws PropertyVetoException {
        ComboPooledDataSource dataSource=new ComboPooledDataSource();
        dataSource.setDriverClass("org.mariadb.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mariadb://localhost:3306/wbg_logistics");
        dataSource.setUser("root");
        dataSource.setPassword("123456");
        dataSource.setMaxPoolSize(30);
        return dataSource;
    }
    /**
     * MyBatis的連接池
     * @return
     */
    //@Bean
    public DataSource getMyBatisDataSource(){
        //數據庫連接池
        PooledDataSource dataSource = new PooledDataSource();
        //設驅動
        dataSource.setDriver("org.mariadb.jdbc.Driver");
        //用戶名
        dataSource.setUsername("root");
        //密碼
        dataSource.setPassword("123456");
        //數據庫連接
        dataSource.setUrl("jdbc:mariadb://localhost:3306/wbg_logistics");
        dataSource.setDefaultAutoCommit(false);
        return dataSource;
    }
    /**
     * Spring自帶的SimpleDriverDataSource
     * @return
     */
    //@Bean
    public DataSource getSimpleDriverDataSource(){
        SimpleDriverDataSource dataSource=new SimpleDriverDataSource();
       return dataSource;
    }
View Code

 第二步:配置SqlSessionFactoryBean

需要xml配置的代碼:

 /**
     * 獲取SqlSessionFactoryBean
     *
     * @return
     */
    @Bean
    public SqlSessionFactoryBean getSqlSessionFactory(DataSource dataSource){
        SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
        //注入數據庫連接池
        sqlSessionFactoryBean.setDataSource(dataSource);
        //配置MyBaties全局配置文件:mybatis-config.xml
        sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
        //掃描entity包 使用別名
        sqlSessionFactoryBean.setTypeAliasesPackage("com.wbg.springJavaConfig.dao");
        //掃描sql配置文件:mapper需要的xml文件
        sqlSessionFactoryBean.setMapperLocations(new Resource[]{new ClassPathResource("classpath:mapper/*.xml")});
        return sqlSessionFactoryBean;
    }
View Code

 

不需要xml的方式:

MySqlSessionFactory 類

package com.wbg.springJavaConfig.Mybatis;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.wbg.springJavaConfig.dao.AdminDao;
import com.wbg.springJavaConfig.entity.Admin;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.*;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;


public class MySqlSessionFactory  {
   
    public static SqlSession getopenSession() throws PropertyVetoException {
        SqlSessionFactory sqlSessionFactory=getSqlSessionFactory(getC3p0DataSource());
        sqlSessionFactory.openSession();
        SqlSession sqlSession=null;
        try {
            //打開SqlSession會話
            sqlSession = sqlSessionFactory.openSession();
            sqlSession.commit();//提交事務
        }catch (Exception ex){
            sqlSession.rollback();//回滾
        }
        return sqlSession;
    }

    public static DataSource getC3p0DataSource() throws PropertyVetoException {
        ComboPooledDataSource dataSource=new ComboPooledDataSource();
        dataSource.setDriverClass("org.mariadb.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mariadb://localhost:3306/wbg_logistics");
        dataSource.setUser("root");
        dataSource.setPassword("123456");
        dataSource.setMaxPoolSize(30);
        return dataSource;
    }

    public static SqlSessionFactory getSqlSessionFactory(DataSource dataSource){

        TransactionFactory transactionFactory = new JdbcTransactionFactory();
        Environment environment = new Environment("development", transactionFactory, dataSource);
        //創建Configuration對象
        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(environment);
        //注冊一個MyBatis上下文別名
        configuration.getTypeAliasRegistry().registerAlias("admin", Admin.class);
        //加入一個映射器
        configuration.addMapper(AdminDao.class);
        //使用SqlSessionFactoryBuilder構建SqlSessionFactory
        //構建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

        return sqlSessionFactory;
    }

}
View Code

進行使用:

1、修改AdminDao首先使用@Select注解

  @Select("select * from Admin")
    List<Admin> listAll();

2、加入配置

 SqlSession sqlSession = new MySqlSessionFactory().getopenSession();

    public AdminServiceImpl() throws PropertyVetoException {
    }
    public List<Admin> listAll() {
     AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
        return adminDao.listAll();
    }

調用:

 AdminServiceImpl adminService = new AdminServiceImpl();

        List<Admin> list=adminService.listAll();
        for (Admin admin : list) {
            System.out.println(admin);
        }

運行:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM