java增强: mybatis框架

  1. mybatis简介
  2. 如何使用: 入门级
  3. 进阶教程

MyBatis ,持久层框架, 以XML 或注解的方式, 将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

part1: 初步配置使用

(使用 idea + maven)

第一步: 创建一个module, java -->  添加maven 支持,在pom.xml中, 添加依赖

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency> 
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.41</version>
        </dependency>

第二步: 创建javabean类---->表和java类的映射配置: 类名Mapper.xml---> 配置数据库连接信息: mybatis-config.xml

A, 创建package: a,  新建javabean类

public class User {
    //字段
    private int id;
    private int age;
    private String name;
    private String sex;

    private List<Orders> listOrders;

    //构造
    public User(int id ,int age, String name, String sex) {
        this.age = age;
        this.name = name;
        this.sex = sex;
        this.id=id;
    }
    public User() { }

    //get,set
    //toString()
}

 B,  表和java类的映射配置: 类名Mapper.xml     (放在: resources文件夹下)

<?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="users">
   
    <insert id="insert">
		insert into users2(name,sex) values(#{name},#{sex})
    </insert>
    <update id="update" >
        update users2 set name=#{name}, sex=#{sex} where id=#{id}
    </update>

    <select id="selectById" resultType="a.User" >
        select * from users2 where id=#{id}
    </select>
    <select id="selectAll" resultType="_user">
        select * from users2
    </select>
</mapper>

C,  配置数据库连接信息: 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>

    <properties>
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/db?allowMultiQueries=true"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </properties>

    <!--别名-->
    <typeAliases>
        <typeAlias type="a.User" alias="_user" />
        <typeAlias type="a.Orders" alias="_orders" />
    </typeAliases>

    <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"/>
    </mappers>
</configuration>

第三步: 开始使用mybatis 的java api

public class TestMybatis {
    SqlSession session;

    @Before
    public void init() throws IOException {
        //加载文件
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");

        //创建session
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
         session = factory.openSession();
    }

    /**
     * 插入
     * @throws IOException
     */
    @Test
    public void t() throws IOException {
        //crud
        int res = session.insert("users.insert", new User(23, "insert3", "boy"));

        session.commit();
        session.close();
        System.out.println("ok,  " +res);
    }

    /**
     * 更新
     * @throws IOException
     */
    @Test
    public void t2() throws IOException {
        //crud
        int res = session.update("users.update", new User(1, 23, "updte2", "girl"));

        session.commit();
        session.close();
        System.out.println("ok,  "+ res);
    }

    /**
     * 查询
     * @throws IOException
     */
    @Test
    public void t3() throws IOException {
        //crud
        User user = session.selectOne("users.selectById", 1);

        session.commit();
        session.close();
        System.out.println("ok");
        System.out.println(user);
    }
    /**
     * 删除
     * @throws IOException
     */
    @Test
    public void t4() throws IOException {
        //crud
        int res = session.delete("users.delete");

        session.commit();
        session.close();
        System.out.println("ok, "+res);

    }

part2:  高级语法(多表关联查询)

A,   一个用户---->多个订单(每个订单: 多个产品 ),关系如下

(需求1: 查询出a用户的所有订单信息, 商品信息 )

  (需求2:  查询出产品p的所在订单信息, 用户信息)

//需求1: 解答
   <select id="selectOrderListDetailsById" resultMap="map3" >
       select orders2.id  orderId,
        orders2.user_id  user_id,
        orders2.product_id  order_productId,

        users2.id  userId,
        users2.name  userName,
        users2.sex  userSex,

        product.id productId,
        product.name productName,
        product.price productPrice

        from  users2
        left join orders2
        on users2.id=orders2.user_id

        left join product
        on orders2.product_id=product.id
        where users2.id=#{id}
    </select>

    <resultMap id="map3" type="_user">
        <id column="userId" property="id" ></id>
        <result column="userName" property="name" ></result>
        <result column="userSex" property="sex" ></result>

        <collection property="listOrders" ofType="_orders" column="userId">
            <id column="orderId" property="id" ></id>

            <collection property="listProduct" ofType="_product" column="orderId">
                <id column="id" property="productId" ></id>
                <result column="productName" property="name" ></result>
                <result column="productPrice" property="price" ></result>
            </collection>
        </collection>
    </resultMap>
//需求2: 解答
    <!--id | price   | user_id | product -->
    <!--id | name    | sex-->
    <select id="selectById" resultMap="map1" >
        select orders2.id  orderId,
        orders2.user_id  user_id,
        orders2.product_id  order_productId,

        users2.id  userId,
        users2.name  userName,
        users2.sex  userSex,

        product.id productId,
        product.name productName,
        product.price productPrice

        from  product
        left join orders2
        on orders2.product_id=product.id

        left join users2
        on users2.id=orders2.user_id

        where product.id=#{id}
    </select>
    <resultMap id="map1" type="_product">
        <id column="productId" property="id" ></id>
        <result column="productName" property="name" ></result>
        <result column="productPrice" property="price" ></result>

        <association property="orders" javaType="_orders">
            <id column="orderId" property="id" ></id>

            <association property="user" javaType="_user">
                <id column="userId" property="id" ></id>
                <result column="userName" property="name" ></result>
                <result column="userSex" property="sex" ></result>
            </association>

        </association>
    </resultMap>

猜你喜欢

转载自blog.csdn.net/eyeofeagle/article/details/82728731