当前位置: 移动技术网 > IT编程>开发语言>Java > mybatis 基础(一) xml配置

mybatis 基础(一) xml配置

2019年09月21日  | 移动技术网IT编程  | 我要评论

如果文章有误,请各位楼下评论,感谢各位积极修正! 一起学习,成为大佬!

mybatis:

1.轻量级

2.高级映射(实体类与数据库表字段的映射) 这样就可以后续开发中去操作实体类而不需要去关注数据库,(但其实已经做了一遍实体类与数据库字段的对应关系)

3.mybatis中 dao层为接口.不需要写实现类,实现的方式交付给xml或注解

4.mybatis所需依赖的jar

    <dependency>
      <groupid>org.mybatis</groupid>
      <artifactid>mybatis</artifactid>
      <version>3.5.0</version>
    </dependency>

     <!-- mysql 连接数据库  java -->
    <dependency>
      <groupid>mysql</groupid>
      <artifactid>mysql-connector-java</artifactid>
      <version>5.1.15</version>
    </dependency>
  1. 注意:映射xml文件的路径需要与接口对应上

第一章 记录xml方式

需要两个xml文件
主配置文件:mybatis-config.xml
映射文件:user.xml

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">

mybatis-config.xml

<configuration>
    <!--配置环境-->
    <environments default="mysql">
        <!--配置mysql的环境-->
        <environment id="mysql">
            <!--配置事务-->
            <transactionmanager type="jdbc"></transactionmanager>
            <!--配置连接池-->
            <datasource type="pooled">
                <property name="driver" value="com.mysql.jdbc.driver"></property>
                <property name="url" value="jdbc:mysql://localhost:3306/database"></property>
                <property name="username" value="root"></property>
                <property name="password" value="root"></property>
            </datasource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/mybatis/dao/user.xml"></mapper>
    </mappers>
</configuration>

user.xml

<!--映射路径-->
<mapper namespace="com.mybatis.dao.iusedao">
    <!--
        注意点:#{}里面的字段对应的是实体类中getter后面的字段开头字母小写.如getusername 对应的就是username
        resulttype:返回值类型
        parametertype:参数类型
        id:对应接口中的方法(对应映射路径中的方法)
    -->

    <!--
        resultmap  主要作用是让实体类与数据库表中字段名映射上
            如果实体类与数据库中字段名在不区分大小写的情况下相同的话,那就不需要配置resultmap,因为mysql数据库不区分大小写,所以可以
            直接映射上

            但是如果实体类与数据库中字段名不相同的话,我们可以由三个解决方案
            1. 直接修改数据库字段名,使之与实体类对应上
            2. 在程序中配置文件中对sql语句改造,起别名,使之与实体类映射上  (直接操作sql语句效率更高)
                如: select gender as usergender,age as userage from user;
            3. 写配置文件 resultmap,使之映射上,但是需要修改resulttype="com.mybatis.entry.user"  为 resultmap="usermap" (方便)

    -->
    <resultmap id="usermap" type="com.mybatis.entry.user">
        <!--首先配置主键对应-->
        <id column="uid" property="useruid"></id>
        <!--其他属性配置-->
        <result column="username" property="username"></result>
        <result column="gender" property="usergender"></result>
        <result column="age" property="userage"></result>
    </resultmap>
    <!--获得所有用户列表-->
    <!--<select id="getusers" resultmap="usermap">-->
    <select id="getusers" resulttype="com.mybatis.entry.user">
        select * from user
    </select>
    <!--添加一条信息-->
    <insert id="saveuser" parametertype="com.mybatis.entry.user">
        <!--配置插入操作后,获取插入数据的id
           keyproperty: 指定返回的id映射到bean中的哪个属性
           keycolumn: 插入数据以后,要返回的内容在数据表中对应的字段名称
           order  after :表示这个selectkey语句的执行是在insert语句之后
        -->
        <selectkey keyproperty="uid" keycolumn="uid" order="after" resulttype="int">
            select last_insert_id();
        </selectkey>
        insert into user(username,gender,age) values (#{username},#{gender},#{age})
    </insert>
    <!--删除一条信息-->
    <delete id="deleteuser" parametertype="java.lang.integer">
        delete from user where uid=#{uid}
    </delete>
    <!--更新一条信息-->
    <update id="updateuser" parametertype="com.mybatis.entry.user">
        update user set username=#{username},gender=#{gender},age=#{age} where uid=#{uid}
    </update>
    <!--
    模糊查询:模糊查询的时候可以使用一个字段作为占位符,然后再测试类或者被调用的时候加上百分号
    -->
    <!--<select id="getusers" resultmap="usermap">-->
    <select id="findbyname" parametertype="java.lang.string" resulttype="com.mybatis.entry.user">
        select * from user where username like #{name}
    </select>

    <!--查询总条数-->
    <select id="findtotal"  resulttype="int">
        select count(1) from user
    </select>


    <!--根据多个对象查询,需要将实体类以及其他属性再封装一层成为新的实体类-->
    <!--<select id="getusers" resultmap="usermap">-->
    <select id="findbyvo" resulttype="com.mybatis.entry.user" parametertype="com.mybatis.entry.vo">
        select * from user  where username=#{user.username} and gender=#{user.gender}
    </select>
</mapper>

接口

public interface iusedao
{
    /**
     * 查询所有用户
     * @return
     */
    public  list<user> getusers();

    /**
     * 添加用户
     * @return
     */
    public  boolean saveuser(user user);

    /**
     * 删除用户
     * @return
     */
    public void deleteuser(int uid);

    /**
     *修改用户
     */
    public void updateuser(user user);

    /**
     * 模糊查询
     * @param username
     * @return
     */
    public list<user> findbyname(string username);

    /**
     * 查询总记录条数
     * @return
     */
    public int findtotal();

    /**
     * 根据新封装的实体类去查询(多条件查询)
     * @param vo  将多个条件封装成一个实体类
     * @return
     */
    public list<user> findbyvo(vo vo);
}

测试类

public class mybatistest {
    private  inputstream inputstream=null;
    private sqlsession sqlsession=null;
    private iusedao userdao=null;
    private sqlsessionfactory sessionfactory=null;

    @before
    public void init() throws exception
    {
         inputstream=resources.getresourceasstream("mybatis-config.xml");
         sessionfactory=new sqlsessionfactorybuilder().build(inputstream);
         sqlsession=sessionfactory.opensession();
         userdao=sqlsession.getmapper(iusedao.class);
    }

    @after
    public void destroy() throws exception
    {
        sqlsession.commit();
        sqlsession.close();
        inputstream.close();
    }

    @test
    public void testfindall() throws exception {
        list<user> list=userdao.getusers();
        for (user user:list) {
            system.out.println(user);
        }
    }

   @test
    public void testsaveuser() throws  exception{
        user user=new user();
        user.setusername("xxx");
        user.setage(20);
        user.setgender("男");
        /*获取保存前的id*/
       system.out.println(user.getuid());
        userdao.saveuser(user);
        /*获取保存后的id*/
       system.out.println(user.getuid());
    }

    @test
   public void testdeleteuser() throws  exception
    {
        int uid=3;
        userdao.deleteuser(uid);
    }

    @test
    public void testupdateuser() throws  exception{
        user user=new user();
        user.setuid(5);
        user.setusername("test");
        user.setage(20);
        user.setgender("男");
        userdao.updateuser(user);
    }

    @test
    public void testfindbyname() throws  exception{
        list<user> users = userdao.findbyname("%x%");
        for (user user:users)
        {
            system.out.println(user);
        }
    }

    @test
    public void testfindtotal() throws  exception{
        int total = userdao.findtotal();
        system.out.println(total);
    }

    @test
    public void testfindbyvo() throws  exception{
        vo vo=new vo();
        user user=new user();
        user.setusername("xxx");
        user.setgender("男");
        vo.setuser(user);
        list<user> vos = userdao.findbyvo(vo);
        for (user user1:vos)
        {
            system.out.println(user1);
        }
    }
}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网