IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Mybatis从入门到精通 -> 正文阅读

[Java知识库]Mybatis从入门到精通

2.第一个Mybatis程序

2.1 搭建环境

2.2 创建一个模块

2.3 编写代码

创建工具类(封装创建Sqlsession的类工具包)

public class mybaitsTool{
     public static SqlSessionFactory sqlSessionFactory;
     static {
         try {
             String resource = "mybatis-config.xml";
             InputStream inputStream = Resources.getResourceAsStream(resource);
             sqlSessionFactory= new SqlSessionFactoryBuilder().build(inputStream);
         } catch (IOException e) {
             e.printStackTrace();
         }
     }

创建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>
    <!-- 环境配置 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!-- 数据库连接相关配置 ,这里动态获取config.properties文件中的内容-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=true&amp;serverTimezone=UTC" />
                <property name="username" value="root" />
                <property name="password" value="admin123" />
            </dataSource>
        </environment>
    </environments>
    <!-- mapping文件路径配置 -->
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

步骤:? ? 实体类? ? Dao接口? 接口实现类(使用xml的方式)

实体类:

public class User {
    private int id;
    private String name;
    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }
    public User(int id) {
        this.id = id;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

Dao接口

public interface UseMapper {
    //根据ID查询用户
    User getuserbyid(int id);
    //插入一个用户
    int  insert(User user);
    //修改一个用户
    int update(User user);
    //删除一个用户
    int delete(int id);
}

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="dao.UseMapper">
<select id="getuserList" resultType="pojo.User">
 select * from user
</select>
 <select id="getuserbyid" parameterType="int" resultType="pojo.User">
  select * from user where id = #{id}
 </select>
 <insert id="insert" parameterType="pojo.User" >
  insert into user(id,name) values (#{id},#{name})
 </insert>
 <update id="update" parameterType="pojo.User" >
  update user set name=(#{name}) where id=(#{id})
 </update>
 <delete id="delete" parameterType="int" >
  delete from user where id=(#{id})
 </delete>
</mapper>

创建测试单元:

public  class AppTest {
     //查询
    @Test
    public void demo1() {
        SqlSession sqlSession = mybaitsTool.sqlSessionFactory.openSession();
        UseMapper mapper = sqlSession.getMapper(UseMapper.class);
        User user = mapper.getuserbyid(2);
        System.out.println(user);
    }
    //插入
    @Test
    public void demo2() {
        SqlSession sqlSession = mybaitsTool.sqlSessionFactory.openSession();
        UseMapper mapper = sqlSession.getMapper(UseMapper.class);
//        User user=new User(5,"陈其","asddasd");
        mapper.insert(new User(4,"陈其12"));
        sqlSession.commit();
       sqlSession.close();
    }
    //修改
    @Test
    public void demo3()
    {
        SqlSession sqlSession=mybaitsTool.sqlSessionFactory.openSession();
        UseMapper mapper =sqlSession.getMapper(UseMapper.class);
        mapper.update(new User(4,"陈其"));
        sqlSession.commit();
        sqlSession.close();
    }
    //删除
    @Test
    public void demo4()
    {
        SqlSession sqlSession=mybaitsTool.sqlSessionFactory.openSession();
        UseMapper mapper = sqlSession.getMapper(UseMapper.class);
        mapper.delete(5);
        sqlSession.commit();
        sqlSession.close();
    }
}

万能Map(作用:为了修改某个内容时,只需要修改对应的内容即可,不许要添加额外的形参)

假设我们的实现类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map

//Map增加一个用户
int insert2(Map<String,Object> map);
<insert id="insert2" parameterType="pojo.User">
 insert into user(id,pwd) values (#{userid},#{userpwd})
</insert>
//Map键值插入
@Test
public void demo5() {
    SqlSession sqlSession = mybaitsTool.sqlSessionFactory.openSession();
    UseMapper mapper = sqlSession.getMapper(UseMapper.class);
     Map<String, Object> map = new HashMap<String, Object>();
    map.put("userid",6);
    map.put("userpwd","6789556");
    mapper.insert2(map);
    sqlSession.commit();
    sqlSession.close();

常见错误:

1.数据库版本要和mysql驱动包的版本保持大版本一致,否则运行会出错

2.增改删操作需要提交事务? ?查不要

3.测试中使用的是接口的形参,不是实现类的

8.生命周期和作用域

生命周期,和作用域是至关重要的,因为错误的使用会导致非常严重的并发问题

SqlSessionFactoryBuilder:

一旦创建了SqlSessionFactory,就不在需要他了

局部变量

SqlsessionFactory;

说白了就是可以想象成数据库连接池

SqlsessionFactory一旦被创建就就应该在运行期间一直存在,没有任何理由丢弃它或重新创建一个实例,因此SqlSessionFactory的最佳作用域是应用作用域

最简单的就是使用单例模式或静态模式单例

SqlSession:

?连接到连接池的一个请求

SqlSession的实例不是线程安全的,因此是不能被共享的,所以他的最佳作用域是请求域或方法作用域? ?用完之后要赶紧关闭,否则占用连接资源

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-14 13:53:43  更:2021-08-14 13:55:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 4:33:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码