java之Mybatis(实训笔记)


mybatis3链接地址

Mybatis

需要:jdk1.8,mysql,maven,idea

1.概念

1.1.什么是mybatis

mybatis是一款优秀的持久层框架

使用mybatis当然是取代JDBC来操作数据库啦。

它对JDBC操作数据库进行了封装,使开发者只需要关注sql本身。

1.2.持久层

数据持久化

持久化:数据放在数据库中,不删库 数据就一直存在。

1.3.为什么使用mybatis?

核心作用:帮助程序员把数据存储到数据库中。

懒,传统的JDBC代码太复杂,简化。他是一个框架。

2.第一个mybatis程序

思路:搭建环境–>导入mybatis–>编写代码–>测试

2.1.搭建环境

搭建数据库 user表

在这里插入图片描述

2.2.新建maven项目 导入依赖

 <!--导入依赖-->
    <dependencies>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
    </dependencies>

2.3.创建新的模块

编写mybatis的核心配置文件

<?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核心配置文件-->
<configuration>

    <!--environments:环境 default:默认选择的环境,意思是说我们可以有多套环境-->
    <environments default="development">
        <environment id="development">
            <!--transactionManager:事务管理 这里使用的是JDBC-->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--useSSL=false 安全连接 &amp; 等同于 & characterEncoding=utf-8 中文-->
                <property name="url" value="jdbc:mysql://localhost:3306/dawenxi?useSSL=false&amp; useUnicode=true&amp; characterEncoding=utf-8&amp; autoReconnect=true"/>
                <property name="username" value="root"/>
                <property name="password" value="Gm_199610"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

编写mybatis工具类

2.4.编写代码

实体类

@Data
public class User {

 private int id;
 private String username;
 private String password;
}

注意:引入了一个lombok依赖,可以使用@Data注解,帮助我们自动生成get,set,tostring方法

public interface UserMapper {
   
 public List<User> getUser();
}

mapper.xml 接口实现类UserDaoImpl转化为一个mapper配置文件

<?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">
<!--namespace会绑定一个mapper接口-->
<mapper namespace="com.gm.mapper.UserMapper">
    <!--select 查询语句 id对应方法名字 resultType根据类型返回,
    resultMap 返回一个集合 这里的User对应的是UserMapper接口中getUser方法的返回值List<User>-->
    <select id="getUserList" resultType="com.gm.pojo.User">
        select * from dawenxi.user;
    </select>
</mapper>

测试类

public class Application {
 public static void main(String[] args) {
//  1.获取sqlSession对象
  SqlSession sqlSession = MybatisUtils.getSqlSession();
//  2.执行sql
  UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  List<User> userList = mapper.getUser();
  for (User user : userList) {
   System.out.println(user);
  }
//  关闭sqlSession
  sqlSession.close();
 }
}

2.5.测试

遇到的问题

1.未注册问题 Type interface com.gm.mapper.UserMapper is not known to the MapperRegistry

每一个mapper.xml都需要在核心配置文件mybatis-config.xml中注册

<mappers>
        <mapper resource="mapper/UserMapper.xml"/>
</mappers>

2.资源导出问题 Cause: java.io.IOException: Could not find resource com.gm.mapper.UserMapper

先settings–>Editor–>File Encodings Project Encodings UTF-8

然后pom.xml添加

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

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

3.CRUD

增删改查

3.1.根据id查询用户

接口

public interface UserMapper {
    
// 根据id查询用户
 public User getUserById(@Param("id") int id);
}

mapper.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">

<!--namespace会绑定一个mapper接口-->
<mapper namespace="com.gm.mapper.UserMapper">
	<!--parameterType 传递参数的类型-->
    <select id="getUserById" resultType="com.gm.pojo.User" parameterType="int">
        select * from user where id = #{id};
    </select>
</mapper>

测试代码

public class Application {
 public static void main(String[] args) {
//  1.获取sqlSession对象
  SqlSession sqlSession = MybatisUtils.getSqlSession();
//  2.执行sql
  UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 	3.输出mapper.getUserById(1)
  System.out.println(mapper.getUserById(1));
//  关闭sqlSession
  sqlSession.close();
 }
}

3.2.新增用户

接口

public interface UserMapper {

// 新增用户
 public int addUser(User user);
}

mapper.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">

<!--namespace会绑定一个mapper接口-->
<mapper namespace="com.gm.mapper.UserMapper">

    <!--parameterType 传递参数的类型 此时的参数类型为User-->
    <insert id="addUser" parameterType="com.gm.pojo.User">
        insert into user (id, username, password)
        values (#{id},#{username},#{password});
    </insert>
</mapper>

测试

package com.gm;

import com.gm.mapper.UserMapper;
import com.gm.pojo.User;
import com.gm.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
/**
 * @author gm
 * 启动类
 */
public class Application {
 public static void main(String[] args) {

//  1.获取sqlSession对象
  SqlSession sqlSession = MybatisUtils.getSqlSession();
//  2.执行sql
  UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//  新增用户 如果没有set方法就会报错
//  注意增删改操作需要提交事务
//  执行新增方法
  int res = mapper.addUser(new User(100, "lisi", "123124"));
  if (res>0){
  System.out.println("插入成功");
 }
//  提交事务
  sqlSession.commit();
//  关闭sqlSession
  sqlSession.close();
 }
}

3.3.修改用户

接口

public interface UserMapper {

// 修改用户
 public int updateUser(User user);
}

mapper.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">

<!--namespace会绑定一个mapper接口-->
<mapper namespace="com.gm.mapper.UserMapper">

    <update id="updateUser" parameterType="com.gm.pojo.User">
        update user 
        set username =#{username},password =#{password}
        where id =#{id};
    </update>
</mapper>

测试

public class Application {
 public static void main(String[] args) {

//  1.获取sqlSession对象
  SqlSession sqlSession = MybatisUtils.getSqlSession();
//  2.执行sql
  UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//  3.执行修改操作
  mapper.updateUser(new User(3,"李四","12123"));
//  提交事务
  sqlSession.commit();
//  关闭sqlSession
  sqlSession.close();
 }
}

注意:修改用户 返回值类型同样是 User 是根据修改 信息 然后根据id替换 同样需要提交事务

3.4.删除用户

接口

public interface UserMapper {

// 删除用户
 public int delUser(@Param("id") int id);
}

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">

<!--namespace会绑定一个mapper接口-->
<mapper namespace="com.gm.mapper.UserMapper">

    <delete id="delUser" parameterType="int">
        delete
        from user
        where id =#{id};
    </delete>
</mapper>

测试

/删除用户-根据id删除的
 @Test
 public void test2(){
  SqlSession sqlSession = MybatisUtils.getSqlSession();
  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  userMapper.delUser(100);
//  提交事务
  sqlSession.commit();
//  关闭
  sqlSession.close();
 }

4.Map传参

如果user有100个字段,而我们只需要修改其中一个或几个字段,难道要写100个字段?但是你不写他出来。

假设我们的实体类,或者数据库中的表,字段或者参数过多,我们应该考虑map。

 <insert id="addUser" parameterType="com.gm.pojo.User">
        insert into user (id, username, password) 
        values (#{id},#{username},#{password});
    </insert>

使用map来传 虽然不正规,但是很万能

4.1.查询用户

接口

// 使用map来查询用户
 public User getUserById2(Map<String,Object> map);

xml

  <!--通过map来查询用户-->
    <select id="getUserById2" resultType="com.gm.pojo.User" parameterType="map">
        select * from user where id = #{id};
    </select>

测试

 @Test
 public void test4(){
  SqlSession sqlSession = MybatisUtils.getSqlSession();
  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  Map<String, Object> map = new HashMap<>();
  map.put("id",1);
  System.out.println(userMapper.getUserById2(map));
 }

4.2.新增用户

接口

// 使用map来新增用户
 public int addUser2(Map<String,Object> map);

xml

    <!--通过map来新增数据-->
    <insert id="addUser2" parameterType="map">
        insert into user (id, username)
        values (#{id},#{username});
    </insert>

测试

// 使用map来新增数据
 @Test
 public void test3(){
  SqlSession sqlSession = MybatisUtils.getSqlSession();
  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  Map<String, Object> map = new HashMap<>();
  map.put("id",11);
  map.put("username","asdasda");
  userMapper.addUser2(map);
  sqlSession.commit();
  sqlSession.close();
 }

4.3.修改用户

接口

// 使用map来修改用户
 public int updateUser2(Map<String,Object> map);

xml

    <!--通过map来修改数据-->
    <update id="updateUser2" parameterType="map">
        update user set password =#{password} where id =#{id};
    </update>

测试

// 通过map来修改用户
 @Test
 public void test5(){
  SqlSession sqlSession = MybatisUtils.getSqlSession();
  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  Map<String, Object> map = new HashMap<>();
  map.put("password","123123");
  map.put("id","1");
 int a= userMapper.updateUser2(map);
 if (a>0){
  System.out.println("修改成功");
 }else {
  System.out.println("修改失败");
 }
  sqlSession.commit();
  sqlSession.close();
 }

4.4.删除用户

接口

// 使用map来删除用户
 public int delUser2(Map<String,Object> map);

xml

   <!--通过map来删除用户-->
    <delete id="delUser2" parameterType="map">
        delete
        from user
        where id =#{id};
    </delete>

测试

// 通过map来删除用户
 @Test
 public void test6(){
  SqlSession sqlSession = MybatisUtils.getSqlSession();
  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  Map<String, Object> map = new HashMap<>();
  map.put("id","2");
  int a = userMapper.delUser2(map);
  if (a>0){
   System.out.println("删除成功");
   for (User user : userMapper.getUser()) {
    System.out.println(user);
   }
  }else {
   System.out.println("删除失败");
  }
     sqlSession.close();
 }

总结:

1.map传递参数,直接在sql中取出对应的key 对应 – parameterType=“map”

2.对象传递参数,直接在sql中取对象的属性即可。对应 – parameterType=“对象”

5.模糊查询

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值