mybatis简单使用

  • 导包(maven导入依赖)

    mybatis必须的 mybatis-3.2.7.zip
    依赖包(包括日志)
    依赖包(包括日志)
    数据库驱动包

  • 配置文件(项目下创建source folder 目录)
    日志的配置文件(log4j.properties)
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
//mabatis配置文件(SqlMapConfig.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>
    <!-- 和spring整合后 environments配置将废除 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url"
                    value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
</configuration>
<mappers>
    <!-- 引入 实体类 映射文件-->
    <mapper resource="User.xml"/>
</mappers>
  • pojo实体类(实体类与数据库对应)与映射文件
//实体类映射文件  需要在核心配置文件进行引入SqlMapConfig.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">
    <!-- namespace:命名空间,用于隔离sql,后面会用全路径 -->
<mapper namespace="test">
<!-- 
        id: sql的唯一主键访问时使用
        parameterType: 传入参数类型
            基础类型(string,int,double...): 当#{}和${}的总数量等于1个的时候
            pojo类型: 当#{}和${}的总数量,大于一个的时候我们使用pojo类型         
        resultType:结果集类型
            pojo类型
            list: 如果返回结果是一个集合对象,那么我们要填写集合泛型里面的类型
        #{}占位符,跟jdbc的?一样,起到站位的作用
            如果parameterType的类型是基础类型(string,int,double,long...),那么#{}里面的变量可以任意填写
            如果parameterType是pojo类型,那么#{}里面的变量必须是属性名称

        ${}拼接符, 起到sql语句原样拼接的作用 注意sql注入问题
            如果parameterType的类型是基础类型(string,int,double,long...),那么${}里面的变量必须要填value
            如果parameterType是pojo类型,那么${}里面的变量必须是属性名称
     -->
    <select id="queryUserById" parameterType="int"
        resultType="cn.itcast.mybatis.pojo.User">
        SELECT * FROM `user` WHERE id  = #{id}
    </select>
    <insert id="insertUser" parameterType="cn.itcast.pojo.User">
        insert into user (username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})

        <!-- 
        selectKey: 查询主键 添加完后直接查询会找不到id值
            LAST_INSERT_ID(): 必须同insert语句在同一个事务里,才可以查到最后一个增加的id
            keyProperty:查询的来的主键的值,放到哪个属性名称中
            resultType:返回的主键类型
            order: 如果再insert之后运行,那么选择after
         -->
        <selectKey keyProperty="id" order="AFTER" resultType="int">
            select LAST_INSERT_ID()
        </selectKey>

    </insert>
</mapper>

原始dao的开发,实现类 接口略过

package cn.itcast.test;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import cn.itcast.pojo.User;

public class UserDaoImpl implements Userdao {
    private SqlSessionFactory sqlSessionFactory;
    public UserDaoImpl(SqlSessionFactory s) {
        super();
    this.sqlSessionFactory =s;  
    }
    public User findUserById(Integer id) {
        User user = new User();
        // 创建SqlSession
        SqlSession session = sqlSessionFactory.openSession();
        //查询
        session.selectOne("test.findUserById",id);
        return user;
    }
}

测试

public class UserDaoTest {
    private SqlSessionFactory sqlSessionFactory;
        @Before//@test方法前执行
    public void init() throws Exception {
        // 创建SqlSessionFactoryBuilder
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        // 加载SqlMapConfig.xml配置文件
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 创建SqlsessionFactory
        this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    }

    @Test
    public void testQueryUserById() {
        // 创建DAO
        UserDao userDao = new UserDaoImpl(this.sqlSessionFactory);
        // 执行查询
        User user = userDao.queryUserById(1);
        System.out.println(user);
    }
}

mapper开发
开发规范:(前两点重要)(把mapper当做dao来看)(接口文件与映射文件我一般放在同一个包下)(使用逆向工程生成简单的增删改查)
1、 Mapper.xml文件中的namespace与mapper接口的类路径相同。
2、 Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
4、 Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

mapper映射文件

<?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">
<!-- namespace:命名空间,用于隔离sql -->
<mapper namespace="cn.itcast.mybatis.mapper.UserMapper">
    <select id="queryUserById" parameterType="int"
        resultType="cn.itcast.mybatis.pojo.User">
        select * from user where id = #{id}
    </select>
</mapper>
         <!-- 单个引入
             <mapper resource="UserMapper.xml" />
            批量扫描包,加载映射文件
                规则1: 接口文件和映射文件必须在同一个包下
                规则2: 接口文件和映射文件名称必须相同,除了扩展名
          -->
        <package name="cn.itcast.mapper"/>

测试

public class UserMapperTest {
    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void init() throws Exception {
        // 创建SqlSessionFactoryBuilder
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        // 加载SqlMapConfig.xml配置文件
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 创建SqlsessionFactory
        this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    }

    @Test
    public void testQueryUserById() {
        // 获取sqlSession,和spring整合后由spring管理
        SqlSession sqlSession = this.sqlSessionFactory.openSession();

        // 从sqlSession中获取Mapper接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        // 执行查询方法
        User user = userMapper.queryUserById(1);
        System.out.println(user);

        // 和spring整合后由spring管理
        sqlSession.close();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值