初学mybatis

在之前的web项目中,我们是用的基本的jdbc的进行sql操作,现在我们来使用mybatis来进行操作.
1.导依赖包

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>

导入之后,我们就可以在使用里面的方法了,在这之前,先进行一下基础操作,写他的配置文件:

<?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>
	<!--数据源-->
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <!--映射文件-->
  <mappers>
    <mapper resource="UserMapper.xml地址"/>
    ...
    <mapper resource="UserMapper.xml地址"/>
  </mappers>
</configuration>

这其中,driver,url,username,password都和jdbc的操作是一致的,jdbc是怎么写的,这里的配置文件也是怎么写的,然后映射文件中的内容写的是到时候写sql语句的地方,现在我们进行映射文件的配置:

<?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="userMapper定义唯一的名称">
	<!--自定义sql语句-->
  <insert id="insert唯一">
  	insert into users(u_id,u_name,u_pass) values(1,'test','666')
  </insert>
  <update id="update">
  	update users set u_name='hello' where u_id=1
  </update>
  <delete id="deleteByid">
  	delete 语句....
  </deletre>
  <select id=""></select>
</mapper>

这样就把两个配置文件配置好了,现在在后端测试一下我们的mybatis方法

        InputStream resourceAsStream = Resources.getResourceAsStream( "mybatis.xml" );
        //getResourceAsStream()中的形参就是mybatis的配置文件文件名,会获取到配置文件的文件流
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build( resourceAsStream );
        //通过流创建SqlSessionFaction对象
        SqlSession sqlSession = build.openSession();
        //获取此次会话对象,openSession的形参默认为false手动提交,可以改为true自动提交
        int insert = sqlSession.insert( "usermapper.insert" );
        //insert()里的形参是映射文件的namespace中的xx方法
        sqlSession.commit();
        //因为是默认false,所以要手动提交
        sqlSession.close();

注意一下,查询语句,select的时候,也就是dql语句的时候,和dml语句是不一样的,dml可以直接在映射路径中写好sql语句,然后后端直接sqlSession.insert/delete/update()方法就可以了,但是查询的时候select要先写一个实体类来进行操作的,不然没有实体类,返回的值需要一个实体类,那么具体写法,首先要在pojo包里添加实体类,注意实体类要和数据库的字段名一致

/* resultType表示将查询的结果映射为一个或多个实体对象 ,且实体类的字段名和实体类的属性名一致
resultMap表示将查询的结果映射为一个或多个实体对象,但是需在xml文件里自定义一个resultMap */
    <select id="selectBlog" resultType="com.bxq.pojo.User"  resultMap="user">
        select * from user limit 0,2
    </select>
    <resultMap id="user" type="com.bxq.pojo.User">
<!--        <id property="实体类属性名" column="主键字段名"/>-->
        <!--表示主键字段-->
        <result property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="password" column="password"/>
    </resultMap>

现在基本的写法已经写好了,现在在基本的基础上来进行mvc操作,首先controller,pojo,service,utils这些包没有差别,唯独有区别的就是dao包的区别了,在用jdbc的时候,dao里的实现类是为了进行sql语句的操作,但是现在我们的sql语句已经在映射文件里实现了,那么就已经没有在dao里实现方法的必要了,那么此时的dao包就只需要在里面写接口方法,然后和映射文件进行交互,此时的映射文件书写方法就要发生改变了:

<?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.bxq.dao.UserDao">
//此时的namespace的值就是dao的全路径
    <update id="update">
    //此时的id就是dao里的方法名
        update user set  username='bxq' where id=2
    </update>
    <select id="select" resultType="com.bxq.pojo.User">
/* resultType表示将查询的结果映射为一个或多个实体对象 ,且实体类的字段名和实体类的属性名一致
resultMap表示将查询的结果映射为一个或多个实体对象,但是需在xml文件里自定义一个resultMap */
        select * from user
    </select>
    <insert id="addUser">
        insert into user values(4,'华子','123456')
    </insert>
    <delete id="delete">
        delete from user where id=3
    </delete>
</mapper>

然后因为dao里的实现方法已经不用写了,所以我们在service里的书写方式也要有所改变,在之前我们是new dao的impl对象,来调用方法,现在不存在书写impl方法了,那么就不用去new对象了,则书写方式就要改变为:

    public List<User> select() {
        try {
            InputStream resourceAsStream = Resources.getResourceAsStream( "mybatis.xml" );
            SqlSessionFactory build = new SqlSessionFactoryBuilder().build( resourceAsStream );
            SqlSession sqlSession = build.openSession( true );
           UserDao mapper = sqlSession.getMapper( UserDao.class );
            //getMapper()里的参数就是写你的dao的接口的字节码文件,此时获取到的就是dao对象
            List<User> select = mapper.select();
            //调用方法
            return select;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值