Mybatis学习第一天

xiaoxiao2021-02-27  239

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

转载请注明原文地址: https://www.6miu.com/read-10139.html

最新回复(0)