Mybatis以及 Mybatis与spring整合

12 篇文章 0 订阅
1 篇文章 0 订阅

一、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 mapper
PUBLIC "-//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 configuration
PUBLIC "-//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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值