Spring整合Mybatis具体代码实现流程

网友投稿 669 2022-10-06

Spring整合Mybatis具体代码实现流程

Spring整合Mybatis具体代码实现流程

目录

原始方式读取mybatis配置文件,获取SqlSession SqlSessionFactory 等

package com.atguigu.rj1192.zyk;

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.List;

public class TestMybatis {

public static void main(String[] args) throws IOException {

//从配置文件中构建SqlSessionFactory

String resource = "mybatis-config.xml";

InputStream inputStream = Resources.getResourceAsStream(resource);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//创建一个SqlSession对象(获取自动事务管理的session)

SqlSession session = sqlSessionFactory.openSession(true);

//获取Mapper对象(反射,设计模式之代理模式)

UserMapper mapper = session.getMapper(UserMapper.class);

User user= new User();

user.setUsername("sdfs");

user.setPassword("123456");

user.setPhone("123456578909");

user.setStatus(1);

mapper.insert(user);

System.out.println(mapper.selectById(3));

}

}

这种方式就是将 SqlSession SqlSessionFactory等类,全部用bean标签放到ioc容器中,

如果这样的话,我只能从ioc中获得到sqlsession,要使用接口的方法,还需要getbean(),不方便,可以再加一个类,它去getbean(),并把这个类放进ioc容器中,使用方法的时候直接从ioc中拿这个类,再.方法名就行了

这个新的类,有mapper生成的sqlsession,sqlsession中有mapper的所有的方法,所以这个类中要有sqlsession的所有方法,即实现 接口(有点绕,就是为了调用这个类的时候,mapper中的所有方法都可以调用)

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://springframework.org/schema/beans

http://springframework.org/schema/beans/spring-beans.xsd">

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://springframework.org/schema/beans

http://springframework.org/schema/beans/spring-beans.xsd">

新加的类

package com.atguigu.rj1192.zyk.dao;

import com.atguigu.rj1192.zyk.pojo.Account;

import org.apache.ibatis.session.SqlSession;

import org.mybatis.spring.SqlSessionTemplate;

import java.util.List;

public class AccoountDaoImpl implements AccountDao {

public SqlSessionTemplate sqlSession;

public void setSqlSession(SqlSessionTemplate sqlSession) {

this.sqlSession = sqlSession;

}

@Override

public List selectall() {

AccountDao accountDao= sqlSession.getMapper(AccountDao.class);

return accountDao.selectall();

}

}

import com.atguigu.rj1192.zyk.dao.AccountDao;

import com.atguigu.rj1192.zyk.pojo.Account;

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.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

import java.io.InputStream;

import java.util.List;

public class test {

@Test

public void query() throws IOException {

ApplicationContext applicationContext=new ClassPathXmlApplicationContext("Spring-dao.xml");

AccountDao accountadoimpl = (AccountDao) applicationContext.getBean("accountdaoimpl");

System.out.println(accountadoimpl.selectall());

}

}

第二种方法 那个新的类 继承SqlSessionDaoSupport,配置文件就可以只配置sqlSessionFactory和datasource,

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://springframework.org/schema/beans

http://springframework.org/schema/beans/spring-beans.xsd">

将新的类放进ioc容器中

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://springframework.org/schema/beans

http://springframework.org/schema/beans/spring-beans.xsd">

将新的类放进ioc容器中

package com.atguigu.rj1192.zyk.dao;

import com.atguigu.rj1192.zyk.pojo.Account;

import org.apache.ibatis.session.SqlSession;

import org.mybatis.spring.support.SqlSessionDaoSupport;

import java.util.List;

public class AccoountDaoImpl2 extends SqlSessionDaoSupport implements AccountDao{

@Override

public List selectall() {

// 和第一种是一样的,只是将赋值写在了 SqlSessionDaoSupport类中,不用自己在xml中赋值了

//getSqlSession();父类中的方法

SqlSession sqlSession=getSqlSession();

AccountDao accountDao=sqlSession.getMapper(AccountDao.class);

return accountDao.selectall();

}

}

调用是一样的

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

public class test {

@Test

public void query() throws IOException {

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationcontext.xml");

AccoountDaoImpl2 accountadlBkLkoimpl = (AccoountDaoImpl2) applicationContext.getBean("AccoountDaoImpl2");

System.out.println(accountadoimpl.selectall());

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于微信 小程序Demo导入的介绍(关于微信的介绍)
下一篇:Linux下5种IO模型
相关文章

 发表评论

暂时没有评论,来抢沙发吧~