Spring 框架入门(三)(spring框架入门教程)
1.创建复杂对象
复杂对象
: 类中没有构造方法,或者构造方法不能调用如接口类型或抽象类实例
//1.类 implements FactoryBean<创建的类型> public class ConnectionFactoryBean implements FactoryBean<Connection> { @Override public Connection getObject() throws Exception { Class.forName("com.mysql.jdbc.Driver"); return DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root"); } @Override public Class<?> getObjectType() { return Connection.class; } @Override public boolean isSingleton() { return false; } } // 2.配置工厂管理 <bean id="connectionFactoryBean" class="com.baizhi.factorybean.ConnectionFactoryBean"></bean> // 3.获取复杂对象 ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); Connection conn = (Connection) context.getBean("connectionFactoryBean"); System.out.println(conn); 复制代码
2.SM整合思路
1.spring框架的作用
spring框架 项目管理框架 主要负责项目中组件对象的创建、使用、销毁
2.Mybatis框架的作用
Mybatis框架 持久层框架 主要用来简化数据库访问的操作
3.整合思路
整合思路: 两个框架作用不同,貌似没有什么联系,更深入看才能看出所谓Spring整合Mybatis,其实就是通过spring框架接管mybatis框架中核心对象的创建
4.mybatis中的核心对象有哪些
Mybatis的核心对象为: SqlSessionFactory
直接依赖于mybatis-config.xml 文件,一定依赖于数据源对象和mapper文件注册
整合就是通过Spring工厂管理SqlSessionFactory对象的创建
5.整合思路图示
3. SM整合DAO编程步骤
1.引入mybatis的依赖jar包
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> 复制代码
2.引入Spring相关jar包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.3.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.3.2.RELEASE</version> </dependency> 复制代码
3.mybatis-spring整合jar
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency> 复制代码
4.引入数据库驱动jar
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency> 复制代码
5.建表
6.编写实体类
7.书写DAO接口
public interface UserDAO { //查询所有 List<User> findAll(); } 复制代码
8.编写mapper配置文件
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xxx.dao.UserDAO"> <select id="findAll" resultType="com.xxx.entity.User"> select id,name,age,bir from t_user </select> </mapper> 复制代码
9.编写Spring-myabtis整合配置文件
核心思路:通过spring接管mybatis中SqlSessionFactory DAO对象的创建
分析一:创建SqlSessionFactory时需要依赖数据源对象 mapper 配置文件的位置
分析二:创建DAO对象时需要依赖 SqlSessionFactory 和 DAO 接口类型
<!--创建数据源对象--> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/sm"/> <property name="username" value="root"/> <property name="password" value="root"/> </bean> <!--创建sqlSessionFactory 注入 dataSource mapperLocations 起别名 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!--注入mapper配置文件的位置--> <property name="mapperLocations" value="classpath:com/xxx/mapper/*.xml"></property> <!--起别名 默认起的别名为类名|类名首字母小写--> <property name="typeAliasesPackage" value="com.xxx.entity"/> </bean> <!--创建DAO对象--> <bean id="userDAO" class="org.mybatis.spring.mapper.MapperFactoryBean"> <!--注入SqlSessionFactory--> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> <!--注入DAO接口所在的包--> <property name="mapperInterface" value="com.xxx.dao.UserDAO"/> </bean> 复制代码
10.启动工厂测试
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); UserDAO userDAO = (UserDAO) context.getBean("userDAO"); List<User> users = userDAO.findAll(); for (User user : users) { System.out.println(user); } 复制代码
3.SM整合Service编程步骤
1.编写spring-mybatis.xml配置文件
<!--创建事务管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!--tx命名空间 tx:advice 作用:将事务管理器自动转为一个通知对象 环绕通知 transaction-manager: 用来指定外部事务管理器是谁 id: 根据事务管理器转换的通知对象在工厂中唯一标识 --> <!--配置事务属性--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!--配置业务层方法事务细粒度配置--> <tx:attributes> <tx:method name="save*"/> <tx:method name="update*"/> <tx:method name="delete*"/> <tx:method name="find*"/> </tx:attributes> </tx:advice> <!--配置事务切面--> <aop:config> <aop:pointcut id="pc" expression="within(com.xxx.service.*)"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/> </aop:config> 复制代码
2.配置图示
3.创建service接口
public interface UserService { List<User> findAll(); } 复制代码
4.创建service对象
public class UserServiceImpl implements UserService { private UserDAO userDAO; public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; } @Override public List<User> findAll() { return userDAO.findAll(); } } 复制代码
5.配置业务组件对象
<!--配置Service组件--> <bean id="userService" class="com.xxx.service.UserServiceImpl"> <property name="userDAO" ref="userDAO"/> </bean> 复制代码
6.启动测试
作者:程序员秃头之路
链接:https://juejin.cn/post/7029612584198389768