Mybatis以及 Mybatis与spring整合

来源:互联网 发布:不是小偷就是程序员 编辑:程序博客网 时间:2024/06/10 05:00

一、MyBatis的概念

MyBatis是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis避免了几乎所有的JDBC代码和手工设置参数以及抽取结果集。MyBatis使用简单的 XML或注解来配置和映射基本体,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

二、MyBatis的简单实现Demo

1、前期准备工作:

准备mysql-connector-java.jar、mybatis-3.2.7.jar、log4j.jar 这三个必要的开发包,在mysql数据库中新建一张t_user表有id username password email 四个字段

create table t_user(id int not null AUTO_INCREAMENT,                     username varchar(45) null,                     password varchar(45) null,                     email varchar(45) null,                     primary key(id));

2、编写数据库表对应的实体类:

package com.mybatis.domain;public class User{        private Integer id;        private String username;        private String password;        private String email;        ....set和get方法.....}

3、编写数据库表操作的接口

package com.mybatis.dao;import com.mybatis.domain.User;import java.util.List;public interface UserDaoMapper{        public List<User> getAllUser();/*得到所有的User*/        public User getUserById(Integer id);/*根据Id得到一个User*/        public void addUser(User user);/*添加一个User*/        public void deleteUser(Integer id);/*根据id删除一个User*/}

4、编写接口对应的映射文件xml,命名为UserDaoMapper.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.mybatis.dao.UserMapper">        <!-- 这里定义一个复杂的结果类型可供后面查询语句select中的resultMap 使用,这里由于我们使用了构造函数,所以不需要使用jdbcType来指定类型-->        <resultMap type="User" id="usermap">                <result property="id" column="id" />                <result property="username" column="username"/>                <result property="password" column="password" />                <result property="email" column="email" />        </resultMap>         <select id="getAllUser" resultType="User">           select * from t_user        </select>        <!-- 根据Id得到一个User -->        <select id="getUserById"  parameterType="Integer" resultType="User">                select * from t_user where id=#{id}        </select>        <!-- 添加用户 -->        <insert id="addUser" parameterType="User" useGeneratedKeys="true"  keyColumn="id">                insert into t_user(username,password,email) values(#{username},#{password},#{email})        </insert>        <!-- 根据id删除一个用户 -->        <delete id="deleteUser" parameterType="Integer">                delete from t_user where id=#{id}        </delete></mapper>

5、编写mybatis的配置文件mybatis-config.xml<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 这里是一个全局配置,可以设置各种属性,如懒加载、使用缓存 -->        <settings>                <setting name="lazyLoadingEnabled" value="false" />                <setting name="cacheEnabled" value="true" />        </settings><!-- 这里是可以为类设置别名,这样就可以在引用时可以不写类的全路径 -->        <typeAliases>                <typeAlias alias="User" type="com.mybatis.domain.User" />                <typeAlias alias="UserDaoMapper" type="com.mybatis.dao.UserDaoMapper" />        </typeAliases>        <environments default="development">                <environment id="development">                        <transactionManager type="JDBC" />                        <dataSource type="POOLED">                                <property name="driver" value="com.mysql.jdbc.Driver" />                                <property name="url" value="jdbc:mysql://localhost:3306/mybaits" /><!-- 数据库名为mybaits -->                                <property name="username" value="root" /><!--用户名  -->                                <property name="password" value="root" /><!-- 密码-->                        </dataSource>                </environment>        </environments><!-- 这里配置一些使用sql查询语句的xml文件,而其中mapper有class,resource,url三种属性-->        <mappers>                <mapper resource="com/mybatis/dao/UserMapper.xml" />        </mappers></configuration>

6、编写一个测试类

package com.mybatis.test;import com.mybatis.domain.User;public class UserDaoMapperTest{        public static void main(String[] args) {                String resource="mybatis-config.xml";                InputStream input=Resources.getResourceAsStream(resource);/*加载配置文件*/                SqlSessionFactory ssf=new SqlSessionFactoryBuilder().build(input);/*构建sqlSession工厂*/                SqlSession session=ssf.openSession();/*拿到一个session*/                UserDaoMapper userDaoMapper=session.getMapper(UserDaoMapper.class);/*拿到接口并进行初始化*/                User user=userDaoMapper.getUserById(1);         }}

 三、spring整合mybatis

1、spring整合mybatis时候,除了要保留来的mybatis开发包以外,我们还需要加入spring的开发包,特别是注意要加入mybatis-spring.jar的整合包。
2、我们在MyBatis的简单实现Demo上进行整合。这里我们要保持User,UserDaoMapper,UserDaoMapper.xml这三个文件不变,去掉mybatis-config.xml文件,加入一个spring
的配置文件bean.xml。

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:util="http://www.springframework.org/schema/util"       xmlns:tx="http://www.springframework.org/schema/tx"       xmlns:context="http://www.springframework.org/schema/context"        xmlns:aop="http://www.springframework.org/schema/aop"       xsi:schemaLocation="                http://www.springframework.org/schema/beans                http://www.springframework.org/schema/beans/spring-beans-3.0.xsd                http://www.springframework.org/schema/tx                http://www.springframework.org/schema/tx/spring-tx-3.0.xsd                     http://www.springframework.org/schema/context                http://www.springframework.org/schema/context/spring-context-3.0.xsd                http://www.springframework.org/schema/aop                http://www.springframework.org/schema/aop/spring-aop-3.0.xsd                http://www.springframework.org/schema/util                http://www.springframework.org/schema/util/spring-util-3.0.xsd">        <!-- 1. 数据源 : DriverManagerDataSource -->        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">                <property name="driverClassName" value="com.mysql.jdbc.Driver"/>                <property name="url" value="jdbc:mysql://localhost:3306/mybaits"/><!-- 数据库名为mybaits -->                <property name="username" value="root"/><!-- 用户名 -->                <property name="password" value="root"/><!-- 密码 -->        </bean>        <!-- 2. mybatis的SqlSession的工厂: SqlSessionFactoryBean  dataSource / typeAliasesPackage-->        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">                <property name="dataSource" ref="dataSource"/>                <!-- 扫描与数据库对应的实体类 -->                <property name="typeAliasesPackage" value="com.mybatis.domain"/>        </bean>        <!-- 3. mybatis自动扫描加载Sql映射文件 : MapperScannerConfigurer sqlSessionFactory / basePackage-->        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">            <!-- 这里的value是指的是放映射文件的包 ,这个property是必须的-->                <property name="basePackage" value="com.mybatis.dao"/>                <property name="sqlSessionFactory" ref="sqlSessionFactory"/>        </bean>        <!-- 4. 事务管理 : DataSourceTransactionManager -->        <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">                <property name="dataSource" ref="dataSource"/>        </bean>        <!-- 5. 使用声明式事务 -->        <tx:annotation-driven transaction-manager="txManager" /></beans>

3、编写一个junit测试类,这里用到了spring框架自带的测试框架

//这里用的是spring自带的一个测试框架@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("/beans.xml")public class spring_mybatis_Test{        @Autowired        private UserDaoMapper userDaoMapper;        @Test        public void findAllUser(){                List<User> users=userDaoMapper.getAllUser();                for (User user :users ) {                        System.out.println(user);                }    }}

0 0
原创粉丝点击