2020-10-26 mybatis入门

package com.kyz.servlet;

import com.sun.corba.se.impl.orbutil.graph.Graph;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

public class ImageServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //如何让来浏览器三秒内刷新一次
        resp.setHeader("refresh","2");
        //浏览器三秒刷新一次 看起来就像是连续的
        //在内存中创建一个图片
        BufferedImage image = new BufferedImage(1000,200,BufferedImage.TYPE_INT_RGB);
        //得到图片
        Graphics2D g =(Graphics2D)image.getGraphics();
        //设置图片的背景颜色
        g.setColor(Color.orange);
        g.fillRect(0,0,1000,200);
        //给图片写数据
        g.setColor(Color.blue);
        g.setFont(new Font(null,Font.BOLD,60));
        g.drawString(makeNum(),400,100);
        //设置响应头
        resp.setContentType("image/png");
        //网站存在缓存,设置不让网站缓存
        resp.setDateHeader("expires",-1);
        resp.setHeader("Cache-Control","no-cache");
        resp.setHeader("pragma","no-cache");
        //把图片写给浏览器
        boolean write = ImageIO.write(image,"jpg",resp.getOutputStream());
        //super.doGet(req, resp);
    }
    //生成随机数
    public String makeNum(){
        Random random = new Random();
        String num = random.nextInt(99999999)+"";
        StringBuffer sb = new StringBuffer();
        //作用是
        for(int i =0;i<8-num.length();i++)
        {
            sb.append("0");
        }
        String s = sb.toString()+num;
        //保证数据一定是7位的
        return num;
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doPost(req, resp);
    }
}

狂神小课堂,动态验证码的实现。

Mybatis

第一个Mybatis程序

1.搭建环境

CREATE DATABASE Mybatis;

use Mybatis;

CREATE TABLE user(

id INT(20) NOT NULL PRIMARY KEY,

account VARCHAR(20)DEFAULT NULL,

password VARCHAR(20)DEFAULT NULL

)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO user (id,account,password) VALUE('1','root','123456');

INSERT INTO user (id,account,password) VALUE('2','root1','123456');

INSERT INTO user (id,account,password) VALUE('3','root2','123456');

INSERT INTO user (id,account,password) VALUE('4','root3','123456');CREATE DATABASE Mybatis;

数据库设置完毕

项目设置,创建一个普通的Maven项目,删除掉src,导入denpendency

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>

引入依赖使用Mybatis

写一个Mybatisutils工具类,

String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

所以要在Resources中写一个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>
    <!--连接数据库-->
    <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://123.57.158.82/Mybatis?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=true&amp;verifyServerCertificate=false"/>
                <property name="username" value="******"/>
                <property name="password" value="*********"/>
            </dataSource>
        </environment>
    </environments>
​
    <!--注册中心-->
    <mappers>
        <mapper resource="com/kyz/dao/UserMapper.xml"/>
    </mappers>
</configuration>
​

这个配置文件中写了数据库的连接配置。注意&后要写amp;

2.实现DAO接口

1.首先写一个user类声明其中的属性。

2.写一个UserDao接口

package com.kyz.dao;
​
import com.kyz.pojo.user;
​
import java.util.List;
​
public interface UserDao{
        List<user> getUserList();
}
​

接口由一个实现类转化为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">
<mapper namespace="com.kyz.dao.UserDao">
    <select id="getUserList" resultType="com.kyz.pojo.user">
    select * from Mybatis.user;
  </select>
</mapper>

3.使用junit来测试

测试在TEST中写

要写@test

 

public class userDaoTest {
@Test
    public void test(){
​
    //获得Sqlsession对象
    SqlSession sqlsession = MybatisUtil.getSqlsession();
    //执行
    UserDao mapper = sqlsession.getMapper(UserDao.class);
    List<user> userList = mapper.getUserList();
​
    for (com.kyz.pojo.user user : userList) {
        System.out.println(user);
    }
    sqlsession.close();
}
}

这里最好是写到try catch和finally中。

#命名空间

在之前版本的 MyBatis 中,命名空间(Namespaces)的作用并不大,是可选的。 但现在,随着命名空间越发重要,你必须指定命名空间。

命名空间的作用有两个,一个是利用更长的全限定名来将不同的语句隔离开来,同时也实现了你上面见到的接口绑定。就算你觉得暂时用不到接口绑定,你也应该遵循这里的规定,以防哪天你改变了主意。 长远来看,只要将命名空间置于合适的 Java 包命名空间之中,你的代码会变得更加整洁,也有利于你更方便地使用 MyBatis。

命名解析:为了减少输入量,MyBatis 对所有具有名称的配置元素(包括语句,结果映射,缓存等)使用了如下的命名解析规则。

  • 全限定名(比如 “com.mypackage.MyMapper.selectAllThings)将被直接用于查找及使用。

  • 短名称(比如 “selectAllThings”)如果全局唯一也可以作为一个单独的引用。 如果不唯一,有两个或两个以上的相同名称(比如 “com.foo.selectAllThings” 和 “com.bar.selectAllThings”),那么使用时就会产生“短名称不唯一”的错误,这种情况下就必须使用全限定名。

  •  

    SqlSession从SqlSessionFactory中获得。

    资源配置失效问题,加入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增删改查

<mapper namespace="com.kyz.dao.UserDao">

必须要提交事务,否则不能提交成功

SqlSession.commit();提交事务

1.namespace

namespace中的package要和DAO/Mapper接口中的包名一致。

2.SELECT 、UPDATE、INSERT

提交事务、提交事务、提交事务、提交事务。

选择、查询语句;

id就是namespace中的方法名。

resultType就是sql语句执行的返回值。

paratype参数类型。

4.Mybatis小结总结

1.环境资源配置

使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:

使用Mybatis-config.xml来从xml中构建SqlSessionFactory

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。从Configuration实例来构建出来的SqlSessionFactoryBuilder一旦创建就不再使用了。作用域是方法作用域。

Mybatisutils

构建SqlSessionFactory的实例非常简单,使用类路径下的资源文件进行配置,Mybatis通过这个resource工具类来从类路径或者其他位置更加容易的加载资源。

XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。后面会再探讨 XML 配置文件的详细内容,这里先给出一个简单的示例:

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>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

这是通过XML进行配置Mybatis的方法。

POJO-UsrInfo

然后开始写POJO中的数据库对象,然后写一个DAO UserMapper接口,然后UserMapper.xml中注册接口中的方法。

UserMapper

UserMapper.xml

2.junit@Test

官方文档推荐使用Try Catch和Finally

public  static SqlSession getSqlsession(){
    return sqlSessionFactory.openSession();
}
Mybatisutil工具类中的代码.

首先SqlSession sqlsession = MybatisUtils.getSession();

SqlSession sqlsession = MybatisUtils.getSession();
//UserMapper.class
UserMapper mapper = sqlsession.getMapper(UserMapper.class);
//通过Mapper调用UserMapper中的方法。
//接口由一个实现类转化为Mapper文件。
sqlsession.close();

1.映射器实例 BlogMappe mapper

映射器是一些绑定映射语句的接口。映射器接口的实例是从 SqlSession 中获得的。虽然从技术层面上来讲,任何映射器实例的最大作用域与请求它们的 SqlSession 相同。但方法作用域才是映射器实例的最合适的作用域。 也就是说,映射器实例应该在调用它们的方法中被获取,使用完毕之后即可丢弃。 映射器实例并不需要被显式地关闭。尽管在整个请求作用域保留映射器实例不会有什么问题,但是你很快会发现,在这个作用域上管理太多像 SqlSession 的资源会让你忙不过来。 因此,最好将映射器放在方法作用域内。就像下面的例子一样:

try (SqlSession session = sqlSessionFactory.openSession()) {
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  // 你的应用逻辑代码
}

mapper

映射器、映射对象、映射器、映射程序、变换器;

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值