Quantcast
Channel: CodeSection,代码区,数据库(综合) - CodeSec
Viewing all articles
Browse latest Browse all 6262

MyBatis04--Mybatis与Spring集成 数据库 数据库学习 MyBatis Spring集成

$
0
0

MyBatis04--Mybatis与Spring集成。在前面的文章中使用Mybatis连接数据库,然后进行增删改查的操作。这篇博文的介绍的是利用Spring管理MyBatis事务,重点是数据源管理以及 bean 的配置。因为在实际的项目开发中,通常会用到Spring来管理DataSource。利用Spring基于接口的编程,充分借助ioc以及aop的便利。

Spring管理MyBatis事务

对于使用Spring管理MyBatis事务,这里做一下简单的介绍:

使用Spring管理MyBatis事务,除了Spring必要的模块beans、context、core、expression、commons-logging之外,还需要以下内容:

(1)MyBatis-Spring-1.x.0.jar,这个是Spring集成MyBatis必要的jar包

(2)数据库连接池

(3)jdbc、tx、aop,jdbc是基本的不多说,用到tx和aop是因为Spring对MyBatis事物管理的支持是通过aop来实现的

(4)aopalliance.jar,这个是使用Spring AOP必要的一个jar包

Mybatis整合Spring:

项目整体结构:


MyBatis04--Mybatis与Spring集成 数据库 数据库学习 MyBatis Spring集成

还是用到MyBatis01中的数据库文件。

1、MyBatis的配置文件mybatis.cfg.xml,里面原本关于jdbc连接的部分可以都可以去掉了,只保留typeAliases的部分。

2、Spring的配置文件beans.xml

SqlSessionFactory里面有两个属性configLocation、mapperLocations,顾名思义分别代表配置文件的位置和映射文件的位置,这里只要路径配置正确,Spring便会自动去加载这两个配置文件。

3、User类与user.mapper.xml

public class User {

private int id;

private String userName;

private String userAge;

private String userAddress;

public User() {

super();

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getUserAge() {

return userAge;

}

public void setUserAge(String userAge) {

this.userAge = userAge;

}

public String getUserAddress() {

return userAddress;

}

public void setUserAddress(String userAddress) {

this.userAddress = userAddress;

}

}

select * from user

insert into user(userName,userAge,userAddress) values

(#{userName},#{userAge},#{userAddress})

4、UserDao接口与其实现类:

public interface UserDao {

public List selectUser();

}

@Repository

public class UserDaoImpl implements UserDao {

private SqlSessionTemplate sqlSession;

@Resource

public void setSqlSession(SqlSessionTemplate sqlSession) {

this.sqlSession = sqlSession;

}

public List selectUser() {

User user = new User();

user.setUserName("张三");

user.setUserAge("20");

user.setUserAddress("青岛");

sqlSession.insert("cn.edu.ldu.model.user.mapper.addUser",user);

return sqlSession.selectList("cn.edu.ldu.model.user.mapper.selectAll");

}

}

(1)@Repository,这个注解和@Component、@Controller和我们最常见的@Service注解是一个作用,都可以将一个类声明为一个Spring的Bean。它们的区别到不在于具体的语义上,更多的是在于注解的定位上。之前说过,企业级应用注重分层开发的概念,因此,对这四个相似的注解应当有以下的理解:

@Repository注解,对应的是持久层即Dao层,其作用是直接和数据库交互,通常来说一个方法对应一条具体的Sql语句 @Service注解,对应的是服务层即Service层,其作用是对单条/多条Sql语句进行组合处理,当然如果简单的话就直接调用Dao层的某个方法了 @Controller注解,对应的是控制层即MVC设计模式中的控制层,其作用是接收用户请求,根据请求调用不同的Service取数据,并根据需求对数据进行组合、包装返回给前端 @Component注解,这个更多对应的是一个组件的概念,如果一个Bean不知道属于拿个层,可以使用@Component注解标注

这也体现了注解的其中一个优点:见名知意,即看到这个注解就大致知道这个类的作用即它在整个项目中的定位。

(2)@Resource,这个注解和@Autowired注解是一个意思,都可以自动注入属性属性。由于SqlSessionFactory是MyBatis的核心,它在spring.xml中又进行过了声明,因此这里通过@Resource注解将id为”sqlSessionFactory”的Bean给注入进来,之后就可以通过getSqlSession()方法获取到SqlSession并进行数据的增、删、改、查了。

5、Test测试类:

public class Test {

public static void main(String[] args) {

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

UserDao userDao = (UserDao)applicationContext.getBean("userDao");

System.out.println(userDao.selectUser().size());

}

}

6、运行结果:

这里简单测试了一下数据库中记录的数目


MyBatis04--Mybatis与Spring集成 数据库 数据库学习 MyBatis Spring集成

Viewing all articles
Browse latest Browse all 6262

Trending Articles