mybatis 学习汇总

mybatis 学习汇总

需要的文件

jdbc.properties
SqlMapConfig.xml

mybatis 配置

pom.xml

需要的 pom 依赖:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.11</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

在 pom 中指定资源的位置

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.xml</include>
                <include>**/*.properties</include>
            </includes>
        </resource>
    </resources>
</build>

jdbc.properties

jdbc 配置:

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456

SqlMapConfig.xml

xml 配置:

作用:用于加载并引用属性文件

<properties resource="jdbc.properties"/>

作用:输出日志

<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

作用:为实体起别名
单个

<typeAliases>
	<typeAlias type="com.zjh.model.Student" alias="student"/>
</typeAliases>

批量

<typeAliases>
    <package name="com.zjh.model"/>
</typeAliases>

作用:用于配置MyBatis的运行环境信息

<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"></transactionManager>
        <dataSource type="POOLED">
            <property name="driver" value="${jdbc.driverClassName}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
        </dataSource>
    </environment>
</environments>

作用:用来将SQL语句映射到Java对象的方法

<mappers>
    // 单个注册,在resource下
    <mapper resource="StudentMapper.xml"></mapper>
    // 单个注册,在java下
    <mapper class="com.zjh.mapper.StudentMapper"></mapper>
    // 批量注册,在java下
    <package name="com.zjh.mapper"/>
</mappers>

CRUD

查询字段-include

<sql id="allColumns">
   id, username, birthday date, sex, address
</sql>
// 使用
<include refid="allColumns"></include>

模糊查询:

where username like concat('%', #{name}, '%')

where-if

作用:任意多个条件查询

<where>
    <if test="userName != null and userName!= ''">
        and username like concat('%', #{userName}, '%')
    </if>
    <if test="date != null">
        and birthday = #{date}
    </if>
    <if test="sex != null and sex != ''">
        and sex = #{sex}
    </if>
    <if test="address != null and address != ''">
        and address like concat('%', #{address}, '%')
    </if>
</where>

foreach

作用:循环遍历
collection:接受传入的内容,如果是List集合,值为list,如果是数组,值为array,如果是Map,值为map
item:遍历的临时变量或对象
separator:多个值之间的分隔符
open,close:整个循环的最外层的括号

<foreach collection="array" item="id" separator="," open="(" close=")">
    #{id}
</foreach>

set-if

作用:任意多个条件的更新

<set>
    <if test="user.userName != null and user.userName != ''">
        username = #{user.userName},
    </if>
    <if test="user.date != null">
        birthday = #{user.date},
    </if>
    <if test="user.sex != null and user.sex != ''">
        sex = #{user.sex},
    </if>
    <if test="user.address != null and user.address != ''">
        address = #{user.address},
    </if>
</set>

resultMap

使用:当数据库列名与实体类字段名不一致时或实体类关联了其他对象
多对一或一对一:Order 实体类持有 Customer 对象,使用 association

<resultMap id="orderMap" type="Order">
    <id column="oid" property="id"></id>
    <result column="orderNumber" property="number"></result>
    <result column="orderPrice" property="price"></result>
    <association property="customer" javaType="Customer">
        <id column="cid" property="id"></id>
        <result column="name" property="name"></result>
        <result column="age" property="age"></result>
    </association>
</resultMap>

一对多或多对多:Customer 实体类持有 Order 集合,使用 collection

<resultMap id="customerMap" type="Customer">
    <id column="cid" property="id"></id>
    <result column="name" property="name"></result>
    <result column="age" property="age"></result>
    <collection property="orders" ofType="Order">
        <id column="oid" property="id"></id>
        <result column="orderNumber" property="number"></result>
        <result column="orderPrice" property="price"></result>
    </collection>
</resultMap>

小知识

resultType(resultMap):是数据输出类型
parameterType:数据输入类型

测试

使用 mybatis 进行 crud:增加,删除,修改需要添加 sqlSession.commit();来确保对数据库所做的更改被保存

SqlSession sqlSession;
UserMapper userMapper;

//方法前调用
@Before
public void openSqlSession() throws IOException {
    InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
    sqlSession = factory.openSession(true);
    userMapper = sqlSession.getMapper(UserMapper.class);
}

//方法后调用
@After
public void closeSqlSession() {
    sqlSession.close();
}

增加

@Test
public void testAdd() throws ParseException {
    User user = new User("赵789", simpleDateFormat.parse("2000-04-04"), '女', "深圳");
    int add = userMapper.add(user);
    System.out.println(add);
    sqlSession.commit();
}

知识点练习

mybatis知识点练习(gitee仓库)

  • 31
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

费卡拉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值