MyBatis笔记(基本用法、连接数据库)

目录

基本用法

环境配置

导入jar包

SqlMapConfig.xml文件

dao接口

Mapper映射文件

log4j.properties文件(不重要)

连接数据库

Mapper映射文件中sql语句的写法

属性分析

占位符

总结


基本用法

环境配置

导入jar包

<!-- mybatis依赖 -->
<dependency> 
    <groupId>org.mybatis</groupId> 
    <artifactId>mybatis</artifactId> 
    <version>3.5.2</version>
</dependency>
<!-- 数据库依赖 -->
<dependency>
    <groupId>mysql</groupId> 
    <artifactId>mysql-connector-java</artifactId> 
    <version>8.0.16</version>
    <scope>runtime</scope>
</dependency>
<!-- log4j⽇志依赖 -->
<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.17</version>
</dependency>

SqlMapConfig.xml文件

该文件放在类路径下,即resources文件夹下

<?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>
    <!-- 配置 mybatis 的环境 -->
    <environments default="mysql">
        <!-- 配置 mysql 的环境 -->
        <environment id="mysql">
            <!-- 配置事务的类型 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置连接数据库的信息:⽤的是数据源(连接池) -->
            <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///<!--这里填数据库名-->?serverTimezone=GMT"/>
                <property name="username" value="<!--账号-->"/>
                <property name="password" value="<!--密码-->"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 告知 mybatis 映射配置的位置 -->
    <mappers>
        <mapper resource="com/zzxx/dao/IUserDao.xml"/>
    </mappers>
</configuration>

dao接口

package com.zzxx.dao;

import com.zzxx.domain.User;

import java.util.List;

public interface IUserDao {
	/**
	 * 查询所有⽤户
	 * @return
	 */
	List<User> findAll();
	//根据id查询
	User findByID(int id);
	//根据姓名查询
	List<User> findByName(String name);
	//查询全部的数量
	int countAll();
	//根据id删除
	void deleteByID(int id);
	//修改
	void update(User user);
	//新增
	void insertUser(User user);

}

Mapper映射文件

位置根据SqlMapConfig.xml文件中映射配置的位置来,文件名需要和dao接口名一致

<?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.zzxx.dao.IUserDao">
    <!-- 配置查询所有操作 -->
    <select id="findAll" resultType="com.zzxx.domain.User">
        select * from user
    </select>
    <select id="findByID" parameterType="int" resultType="com.zzxx.domain.User">
        select * from user where id = #{id}
    </select>
    <select id="countAll" resultType="int">
        select count(*) from user
    </select>
    <delete id="deleteByID" parameterType="int">
        delete from user where id = #{id};
    </delete>
    <insert id="insertUser" parameterType="com.zzxx.domain.User">
        insert user (id,username,birthday,sex,address) values (#{id},#{username},#{birthday},#{sex},#{address})
    </insert>
    <update id="update" parameterType="com.zzxx.domain.User">
        update user set username = #{username}, birthday = #{birthday}, sex = #{sex}, address = #{address} where id = #{id}
    </update>
    <select id="findByName" parameterType="String" resultType="com.zzxx.domain.User">
        select * from user where username like "%"#{username}"%"
    </select>

</mapper>

log4j.properties文件(不重要)

位置在类路径

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

连接数据库

// 1.读取配置⽂件
		InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.创建 SqlSessionFactory 的构建者对象
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
// 3.使⽤构建者创建⼯⼚对象 SqlSessionFactory
		SqlSessionFactory factory = builder.build(in);
// 4.使⽤ SqlSessionFactory ⽣产 SqlSession 对象
		SqlSession session = factory.openSession();
// 5.使⽤ SqlSession 创建 dao 接⼝的代理对象
		IUserDao userDao = session.getMapper(IUserDao.class);
// 6.使⽤代理对象执⾏查询所有⽅法
 		List<User> users = userDao.findAll();
 		for (User user : users) {
 			System.out.println(user);
 		}
// 7.释放资源
		session.commit();
		session.close();
		in.close();

Mapper映射文件中sql语句的写法

属性分析

  • id:方法名
  • parameterType:输入类型
  • resultType:返回值类型

<insert id="insertUser" parameterType="com.zzxx.domain.User">
        insert user (id,username,birthday,sex,address) values (#{id},#{username},#{birthday},#{sex},#{address})
</insert>

<delete id="deleteByID" parameterType="Integer">
        delete from user where id = #{aaa};
</delete>

<update id="update" parameterType="com.zzxx.domain.User">
        update user set username = #{username}, birthday = #{birthday}, sex = #{sex}, address = #{address} where id = #{id}
</update>

<select id="findByName" parameterType="String" resultType="com.zzxx.domain.User">
        select * from user where username like "%${username}%"
</select>

占位符

  • #{}或${}中加参数名做占位符,#{}mybatis会预编译将其换成?,${}则是直接采用拼接
  • #{}中的参数类型如果是String,会自动加上引号,而${}因为是拼接,所以需要在sql语句定义时在外面套上引号,因此,${}可能会有sql注入问题
  • 如果参数是基本数据类型或者包装类,占位符中的内容可以随便填(老版本${}中只能填value),但如果是自定义类型,占位符里的名字必须和字段名一致(包括大小写)

总结

  • 使用mybatis时注意两个xml文件存放的位置以及其中参数要和对应的dao接口还有方法绑定(使用全限定类名)
  • update,delete,insert标签本质上都是使用update所以可以使用同一个标签
  • 没有设置自动提交的话DML语句会自动回滚,所以得使用session.commit()方法提交
  • 两种占位符使用要注意,有些时候不能sql注入的,一定不要使用${}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值