Spring整合Mybatis

目录

利用XML配置

实体类

Dao层接口

Dao.xml

Service层

Spring配置文件

测试

利用注解配置

Dao层

Service层

读取配置文件类

配置类

测试类


利用XML配置

需要导入Spring相关包和Mybatis相关包,然后就是下面这个整合包

<!--MyBatis和Spring的整合包 由MyBatis提供-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.0</version>
</dependency>

实体类

(下面省略get set)

public class User {
    int id;
    String username;
    double money;


    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", money=" + money +
                '}';
    }
}

Dao层接口

public interface UserDao {
    List<User> getlist();
}

Dao.xml

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="zs.Dao.UserDao">
    <select id="getlist" resultType="User">
        select * from user;
    </select>
</mapper>

Service层

public class UserServiceImp implements UserService {
    UserDao userDao;

    @Override
    public List<User> getList() {
        return userDao.getlist();
    }
}

Spring配置文件

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context.xsd 
http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--声明数据源-->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <array>
                <value>classpath:database.properties</value>
            </array>
        </property>
    </bean>

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="${url}"></property>
        <property name="driverClass" value="${driver}"></property>
        <property name="user" value="${username}"></property>
        <property name="password" value="${password}"></property>
    </bean>

    <!--声明MyBatis中的核心对象-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <!--类的别名-->
        <property name="typeAliasesPackage" value="zs.table"></property>
        <!--指向映射文件-->
        <property name="mapperLocations" value="mapper/UserDao.xml"></property>
    </bean>

    <!--通过包扫描生成DAO接口的动态代理-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="zs.Dao"></property>
    </bean>

    <!--声明程序中的SERVICE对象-->
    <bean id="service" class="zs.Service.impl.UserServiceImp" autowire="byType">
    </bean>

    <!--整合事务-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--声明通知,增强所有方法-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="name*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>

    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* zs.Service.*.*(..))"></aop:advisor>
    </aop:config>
</beans>

测试

ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
UserService us=(UserService)app.getBean("service");
System.out.println(us.getList());

利用注解配置

实体类一样

Dao层

使用的是Mybatis注解,配置sql语句

public interface UserDao {
    @Select("select * from user")
    List<User> getlist();
}

Service层

把类转换成Bean,自动装配,设置事务

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    UserDao userDao;

    @Override
    @Transactional(isolation=Isolation.READ_COMMITTED)
    public List<User> getList() {
        return userDao.getlist();
    }

    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
}

读取配置文件类

@Component
@PropertySource("classpath:database.properties")//指向属性文件地址
public class PropertyConfig {

    @Value("${url}") //获取properties文件中的值。
    private String url; //该变量不能为static的 且必须拥有get、set
    @Value("${driver}")
    private String driver;
    @Value("${username}")
    private String username;
    @Value("${password}")
    private String password;

}

配置类

@Configuration //核心配置注解
@ComponentScan(basePackages ="zs") //注解扫描器 <context:componetscan/>
@MapperScan(basePackages = {"zs.Dao"}) //MyBatis的注解 扫描dao接口生成动态代理类
//当心!两种扫描会冲突
@EnableTransactionManagement //开启事务自动配置
public class AppConfig {
    //配置数据源
    @Bean
    public DataSource dataSource(){
        DriverManagerDataSource ds=new DriverManagerDataSource();
        ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/library?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true");
        ds.setUsername("root");
        ds.setPassword("123456");
        return ds;
    }

    //数据库工厂
    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
        SqlSessionFactoryBean sfs=new SqlSessionFactoryBean();
        sfs.setDataSource(dataSource);
        return sfs;
    }

    //事务
    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource){
        DataSourceTransactionManager dt=new DataSourceTransactionManager();
        dt.setDataSource(dataSource);
        return dt;
    }
}

测试类

public class Test {
    public static void main(String args[]){
       
        ApplicationContext app=new AnnotationConfigApplicationContext(AppConfig.class);//必须用.class

        UserService us=(UserService) app.getBean(UserService.class);//必须用接口
        System.out.println(us.getList());
    }
}

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值