Mybatis学习第一天

一:Mybatis简介与对比

1.简介

2010 : 之前叫ibatis 是由Apache进行开发 2010 之后交由Google,2013 年交由github进行管理,Mybaits是一个数据持久层框架 (jdbc)。

2.对比

|Hibernate| 重量级的框架| 速度慢 |代码量小 |不用写sql语句|
|Mybatis | 轻量级框架 |速度较快 |代码一般 |需要写sql语句|
|Jdbc | 轻量级 |速度最快的|代码量较大|需要写sql语句|

二:配置pom.xml 依赖导入

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.2.3</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.26</version>
    </dependency>
</dependencies>

三:配置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>
        <!-- 该配置影响的所有映射器中配置的缓存的全局开关。默认值true -->
        <setting name="cacheEnabled" value="false" />
        <!-- 允许 JDBC 支持自动生成主键,需要驱动兼容。 如果设置为 true 则这个设置强制使用自动生成主键, 尽管一些驱动不能兼容但仍可正常工作(比如 
            Derby)。 默认值false -->
        <setting name="useGeneratedKeys" value="true" />
        <!-- 配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH 
            执行器将重用语句并执行批量更新。默认SIMPLE -->
        <setting name="defaultExecutorType" value="REUSE" />
    </settings>
     <!--  
              通过package, 可以直接指定package的名字, mybatis会自动扫描你指定包下面的javabean,  
              并且默认设置一个别名,默认的名字为: javabean 的首字母小写的非限定类名来作为它的别名。  
              也可在javabean 加上注解@Alias 来自定义别名, 例如: @Alias(user)   

                List<User> list = this.service.selectAll();

              -->
    <typeAliases>
        <typeAlias alias="User" type="com.ygj.user.User" />
    </typeAliases>
    <!-- 配置数据库信息 mybatis 会自动去连接数据库  不需要在配置其余的信息  也可以说成是环境信息的配置-->
    <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/jnmd" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <!-- 配置我们的mapper映射文件的位置 和数据库建立连接 -->
    <mappers>
        <mapper resource="UserMapper.xml" />
    </mappers>
</configuration>

四:编写实体类

public class User {

    private int id;

    private String name;

    private String pwd;

五:编写接口

public interface UserDao {

    List<User> selectAll();
    int addUser();
    int updateUser();
    int deleteUserById();
}

六:编写映射(UserMapper.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.ygj.dao.UserDao">
    ```
        <!-- id 对应的是接口中的方法  resultType 对应的是返回类型  
            注意: 查询集合时 返回的是集合中的对象 
            resultType 的三种形式
                1 User(mybatis-config.xml中使用<typeAliases></typeAliases>标签配置的别名)
                3 com.ygj.user.User
         -->
    ```
        <select id="selectAll" resultType="com.ygj.user.User" >
            select * from user
        </select>

        <!-- 添加 -->

        <insert id="addUser" parameterType="user">
            insert into user (name,pwd) values (#{name},#{pwd})
        </insert>

        <!-- 修改 -->
        <update id="updateUser" parameterType="User" >
            update user set name= #{name}, pwd = #{pwd} where id = #{id}
        </update>

        <!-- 删除 -->
        <delete id="deleteUserById" parameterType="String">
            delete from user where id = #{id}
        </delete>

        <select id="getListById" parameterType="int" resultType="user" >
            select * from user where id = #{id}
        </select>
    </mapper>

七:测试类

     @Test
    public void test3(){
        Reader reader = null;
        try {
            //用mybaits方法读取主配置文件
            reader = Resources.getResourceAsReader("mybatis-config.xml");
        } catch (IOException e) {
            System.out.println(e.getMessage());

        }
        //session工厂  用的是工厂模式
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        User user = new User(9,"李四","h5+java全栈");

        try {
            mapper.updateUser(user);
            //事物
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

八:动态sql

1.代码块

    <sql id="all" >
        id,name,pwd
    </sql>
    <select id="login" resultType="users" parameterType="users">
        SELECT 
            <include refid="all"></include>
         FROM user WHERE name = #{name} AND pwd = #{pwd}
    </select>

sql 标签和 include 标签结合使用

2.判断/循环

<where> 可以过滤and
<set>可以过滤 ,
<if test=""> 有做判断非空 

3.接值方式

#{} //可以自动判断类型 , 需不需要加 ‘
${} //需要自己写’

九:返回值定义(map)

<resultMap type="com.ygj.user.Users" id="resultUserMap">
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="name" property="name" jdbcType="VARCHAR" />
        <result column="pwd" property="pwd" jdbcType="VARCHAR" />
    </resultMap>

<select id="select" resultMap="resultUserMap" parameterType="users">

当一对多张表的查询时 没有办法放到一个bean中 resultMap就有大作用了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值