两种方式(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 + '\'' +
- '}';
- }
- }
dao包下的AdminDao接口
- public interface AdminDao {
- List<Admin> listAll();
- Admin getById(int aId);
- }
service包下AdminService
- public interface AdminService {
- List<Admin> listAll();
- Admin getById(int aId);
- }
impl包下AdminServiceImpl
- public class AdminServiceImpl implements AdminService {
- @Override
- public List<Admin> listAll() {
- return null;
- }
- @Override
- public Admin getById(int aId) {
- return null;
- }
- }
一、使用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>
二、使用代码构建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;
- }
第二步:配置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;
- }
不需要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;
- }
- }
进行使用:
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);
- }
运行:
两种方式(xml+代码)构建SqlSessionFactory+完整实现的更多相关文章
- Spring IOC 依赖注入的两种方式XML和注解
依赖注入的原理 依赖注入的方式---XML配置 依赖注入的方式---注解的方式 Spring 它的核心就是IOC和AOP.而IOC中实现Bean注入的实现方式之一就是DI(依赖注入). 一 DI的原理 ...
- 基于aspectj实现AOP操作的两种方式——xml配置
1. 要导入的 jar 包: 常用的aspectj表达式: 权限修饰符可以省略,以下表示:返回值类型为任意,com.chy.service包以及其子包下的.任意类的.参数任意的.任意方法 execut ...
- VMware虚拟机直连物理网络的两种方式
VMware虚拟机直连物理网络的两种方式 使用VMware构建虚拟机,通常虚拟机都使用NAT模式.这时,虚拟机有独立的网段.使用NAT模式,虚拟机之间数据都通过虚拟网络传输,不会影响实体机所在的实 ...
- 将Eclipse代码导入到AndroidStudio的两种方式
版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/4183553.html 说到使用AndroidStudio,除 ...
- XFire构建服务端Service的两种方式(转)
XFire构建服务端service的两种方式,一是用xfire构建,二是和spring集成构建. 一,xifre构建,确保把xfire的jar包导入到工程中或classpath. 1,service的 ...
- 将Eclipse代码导入到Android Studio的两种方式
转: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0104/2259.html 说到使用Android Studio,除了新建 ...
- 转: 将Eclipse代码导入到AndroidStudio的两种方式 ,测试了方法2,成功。
蛋疼,不知道为什么我的eclipse的logcat总是莫名其妙的显示一堆黄色字体的字,看不懂的那种,如下图: 然后查了一下资料,说可能是adt版本太低,手机系统太高. 然后本来想升级adt,但是各种折 ...
- 转: 将Eclipse代码导入到AndroidStudio的两种方式
评注: 讲解的非常之详细 转自: http://www.cnblogs.com/ct2011/p/4183553.html 说到使用AndroidStudio,除了新建的项目,我们都会面临的问题 ...
- 简介C#读取XML的两种方式
简介C#读取XML的两种方式 作者: 字体:[增加 减小] 类型:转载 时间:2013-03-03 在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的 ...
随机推荐
- Oracle PL/SQL Developer 上传下载Excel
接到需求,Oracle数据库对Excel数据进行上传和下载,百度后没有很全的方案,整理搜到的资料,以备不时之需. 一.下载Oracle数据到Excel中. 下载数据到Excel在MSSql中很简单,直 ...
- Java基础(七)常用类
一.Math类 1.Math类介绍 Math类属于java.lang包下面,里面包含用于执行基本数学运算的方法,如初等指数,对数,平方根和三角函数,该类被final修饰. 常用字段: 1.E 表示自然 ...
- java.lang.UnsupportedClassVersionError: action/Login : Unsupported major.minor version 52.0 (unable to load class action.Login)异常
用myeclipse新建一个web项目,用了struts2框架,tomcat启动的时候报了这个错误. 我的问题原因是tomcat7的运行环境不知道为什么设置成了myeclipse1.7的jre,我给它 ...
- python使用元类
原文:https://blog.csdn.net/youzhouliu/article/details/51906158 type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义 ...
- jQuery源码分析系列 : 整体架构
query这么多年了分析都写烂了,老早以前就拜读过, 不过这几年都是做移动端,一直御用zepto, 最近抽出点时间把jquery又给扫一遍 我也不会照本宣科的翻译源码,结合自己的实际经验一起拜读吧! ...
- $.each遍历JSON字符串和 Uncaught TypeError: Cannot use 'in' operator to search for '156错误
现在页面和后端交互都流行使用json了 自己记录一下解析字符串的方法,要不老是忘记!!!! success: function (data) { //data是后台传过来的字符串 $.each(JS ...
- webpack2-webpack.config.js配置
写在前面: 了解更多:https://github.com/miaowwwww/webpack-learn 贴一个webpack.ocnfig.js 的配置属性表 一.代码分割: 1.插件 Comm ...
- html 页面清浏览器缓存
<meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv=" ...
- classifier.cc-recv() [ns2.35]
//without comments int chooseECNSlot() { ; ;i<=nslot_;i++) { *count) { *count); )*ti; ;j<=nslo ...
- 高精度定时器实现 z
1背景Permalink .NET Framework 提供了四种定时器,然而其精度都不高(一般情况下 15ms 左右),难以满足一些场景下的需求. 在进行媒体播放.绘制动画.性能分析以及和硬件交互时 ...