Mybatis学习第一天

来源:互联网 发布:君学书院 知乎 编辑:程序博客网 时间:2024/05/22 06:23

一: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就有大作用了!

原创粉丝点击