zoukankan      html  css  js  c++  java
  • JAVA框架 Mybaits

     注意:我们在resultType中,对于selectlist方法也是projo类。resultType参数的含义是list的泛型的类型。

    一:jar包下载:

    https://github.com/mybatis/mybatis-3/releases?after=mybatis-3.2.8

    我使用的版本是3.2,7

    二、创建项目 导入核心jar包和依赖的jar包。

    pom.xml文件内容:

     1   <properties>
     2     <!--需要注意还珠格格编译器的版本要和jdk版本一直-->
     3     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     4     <maven.compiler.source>1.8</maven.compiler.source>
     5     <maven.compiler.target>1.8</maven.compiler.target>
     6   </properties>
     7 
     8   <dependencies>
     9     <dependency>
    10       <groupId>org.slf4j</groupId>
    11       <artifactId>slf4j-log4j12</artifactId>
    12       <version>1.7.5</version>
    13     </dependency>
    14     <dependency>
    15       <groupId>org.slf4j</groupId>
    16       <artifactId>slf4j-api</artifactId>
    17       <version>1.7.5</version>
    18     </dependency>
    19     <dependency>
    20       <groupId>org.apache.logging.log4j</groupId>
    21       <artifactId>log4j-core</artifactId>
    22       <version>2.0.2</version>
    23     </dependency>
    24     <dependency>
    25       <groupId>org.apache.logging.log4j</groupId>
    26       <artifactId>log4j-api</artifactId>
    27       <version>2.0.2</version>
    28     </dependency>
    29     <dependency>
    30       <groupId>mysql</groupId>
    31       <artifactId>mysql-connector-java</artifactId>
    32       <version>5.1.34</version>
    33     </dependency>
    34     <dependency>
    35       <groupId>log4j</groupId>
    36       <artifactId>log4j</artifactId>
    37       <version>1.2.17</version>
    38     </dependency>
    39     <dependency>
    40       <groupId>org.javassist</groupId>
    41       <artifactId>javassist</artifactId>
    42       <version>3.16.1-GA</version>
    43     </dependency>
    44     <dependency>
    45       <groupId>commons-logging</groupId>
    46       <artifactId>commons-logging</artifactId>
    47       <version>1.1.1</version>
    48     </dependency>
    49     <dependency>
    50       <groupId>cglib</groupId>
    51       <artifactId>cglib</artifactId>
    52       <version>2.2.2</version>
    53     </dependency>
    54     <dependency>
    55       <groupId>asm</groupId>
    56       <artifactId>asm</artifactId>
    57       <version>3.3.1</version>
    58     </dependency>
    59     <dependency>
    60       <groupId>org.mybatis</groupId>
    61       <artifactId>mybatis</artifactId>
    62       <version>3.2.7</version>
    63     </dependency>
    64     <dependency>
    65       <groupId>junit</groupId>
    66       <artifactId>junit</artifactId>
    67       <version>4.11</version>
    68       <scope>test</scope>
    69     </dependency>
    70     <dependency>
    71       <groupId>org.junit.jupiter</groupId>
    72       <artifactId>junit-jupiter-api</artifactId>
    73       <version>RELEASE</version>
    74     </dependency>
    75   </dependencies>

     mybaits的配置文件说明:

    其中SqlMapConfig.xml是核心配置文件,数据源、事务等在这里进行配置,内容:

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE configuration
     3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     4         "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 <configuration>
     6     <!-- 和spring整合后 environments配置将废除-->
     7     <environments default="development">
     8         <environment id="development">
     9             <!-- 使用jdbc事务管理-->
    10             <transactionManager type="JDBC" />
    11             <!-- 数据库连接池 mybaits自带的连接池-->
    12             <dataSource type="POOLED">
    13                 <property name="driver" value="com.mysql.jdbc.Driver" />
    14                 <property name="url" value="jdbc:mysql://localhost:3306/day_spring?characterEncoding=utf-8" />
    15                 <property name="username" value="root" />
    16                 <property name="password" value="root" />
    17             </dataSource>
    18         </environment>
    19     </environments>
    20     <mappers >
    21         <mapper resource="account.xml" />
    22     </mappers>
    23 </configuration> 

    account.xml是子配置文件。包含一些sql语句的查询。内容如下:

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper
     3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     5 <mapper namespace="test1"><!--namespace起到sql隔离的作用-->
     6     <select id="FindAccountById" resultType="jd.com.mybaitstest.account" parameterType="java.lang.Integer" >
     7         SELECT * FROM t_account WHERE id=#{id};
     8     </select>
     9     <!--注意like拼接的需要使用#{value} 必须是value。-->
    10     <select id="FindUsernameByNanme" resultType="jd.com.mybaitstest.account" parameterType="java.lang.String" >
    11 
    12         SELECT * FROM  t_account WHERE NAME LIKE '%${value}%';
    13     </select>
    14     <!--插入语句 注意 这里我们插入值是account对象 注意的是这里的占位符的名字是account的属性-->
    15 
    16     <insert id="InsertVal" parameterType="jd.com.mybaitstest.account">
    17         <!-- id返回的设置  标签selectkey 属性keyproperty表示:account的属性名,order 获取是插入的前(before)还是后(after)返回的数据类型-->
    18         <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
    19             <!--通过数据库的内置函数SELECT LAST_INSERT_ID()获取插入的语句返回的id的值。mybaits帮我们设置到我们对象中。并设置属性是id-->
    20             SELECT LAST_INSERT_ID();
    21         </selectKey>
    22         INSERT INTO t_account(NAME ,money) VALUES(#{name},#{money});
    23     </insert>
    24     <delete id="DeletAccoutnById" parameterType="int" >
    25         DELETE FROM t_account WHERE id=#{id};
    26     </delete>
    27     <update id="UpdateById" parameterType="jd.com.mybaitstest.account"  >
    28         UPDATE t_account SET money=#{money} WHERE id=#{id};
    29     </update>
    30 </mapper>

    mybaits的简单的增删改查:

     1 package jd.com.mybaitstest;
     2 
     3 import org.apache.ibatis.io.Resources;
     4 import org.apache.ibatis.session.SqlSession;
     5 import org.apache.ibatis.session.SqlSessionFactory;
     6 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
     7 import org.junit.jupiter.api.Test;
     8 
     9 import java.io.IOException;
    10 import java.io.InputStream;
    11 import java.util.List;
    12 
    13 public class testmyba {
    14 
    15 
    16     @Test
    17     public void  testdemo1() throws IOException {
    18         //查询单条数据
    19         String resouce="SqlMapConfig.xml";
    20         InputStream inputStream= Resources.getResourceAsStream(resouce);
    21         SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
    22         SqlSession sqlSession=sqlSessionFactory.openSession();
    23         account ac=sqlSession.selectOne("test1.FindAccountById",2);
    24         System.out.println(ac);
    25     }
    26     @Test
    27     public  void  testdemo2() throws IOException {
    28         String resource="SqlMapConfig.xml";
    29         //获取主配置文件流
    30         InputStream inp=Resources.getResourceAsStream(resource);
    31         //创建数据库回话
    32         SqlSession sqlSession=new SqlSessionFactoryBuilder().build(inp).openSession();
    33         List<account> list=sqlSession.selectList("test1.FindUsernameByNanme","ok");
    34         System.out.println(list);
    35 
    36     }
    37     @Test
    38     public  void  testInsertdemo() throws IOException {
    39         String resource="SqlMapConfig.xml";
    40         InputStream inp=Resources.getResourceAsStream(resource);
    41         SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inp);
    42         SqlSession sqlSession=sqlSessionFactory.openSession();
    43         account ac=new account();
    44         ac.setMoney(234);
    45         ac.setName("oko");
    46         sqlSession.insert("test1.InsertVal",ac);
    47         //在主配置文件中配置了事务。需要commit 才能生效。
    48         sqlSession.commit();
    49         System.out.println(ac.getId());
    50     }
    51     @Test
    52     public  void  deleteDemo() throws IOException {
    53         String resource="SqlMapConfig.xml";
    54         InputStream inp=Resources.getResourceAsStream(resource);
    55         SqlSession sqlSession=new SqlSessionFactoryBuilder().build(inp).openSession();
    56         sqlSession.delete("test1.DeletAccoutnById",2);
    57         sqlSession.commit();
    58     }
    59     @Test
    60     public  void  updateById() throws IOException {
    61         String resource="SqlMapConfig.xml";
    62         InputStream inp=Resources.getResourceAsStream(resource);
    63         SqlSession sqlSession=new SqlSessionFactoryBuilder().build(inp).openSession();
    64         account ac=new account();
    65         ac.setMoney(100100);
    66         ac.setId(3);
    67         sqlSession.update("test1.UpdateById",ac);
    68         sqlSession.commit();
    69     }
    70 }

     注意:我们使用sqlsessionfactory来获取sqlsession,其中通过selelct、delete、update、insert等方法进行进行增删改查。

    其中方法内的参数delete(“子配置文件的中namespace.语句id值”,参数)。也就是说我们 通过子配置文件的namespace值和语句中的id值来唯一确定执行那个sql语句。

    子配置文件的占位符:

    占位符:作用是底层调用jdbc的时候,使用preparestatment的时候,进行sql的占位符一一对应,传入参数。

    #{}占位符:

      如果传入的是基本的类型那么#{}中的变量名字可以随便写。

      如果传入的是pojo类的时候,那么#{}的变量名字必须要和pojo类的属性名字一致。

    ${}拼接符:

      如果传入的是基本的类型那么${}中的变量名称必须为value。

      如果传入的是pojo类的时候,那么${}必须是和pojo的类的属性名称一致。

      注意${}拼接符,有可能造成sql注入,解决方法可以在用户输入的页面进行校验不可输入sql关键字,不可以输入空格。或者后端做校验验证。

    主键返回

      主键一般是自增或者使用uuid。通过数据库的内置函数获取插入值之后的主键值。

    1、uuid:

     1 <insert  id="insertUser" parameterType="cn.itcast.mybatis.po.User">
     2 
     3 <selectKey resultType="java.lang.String" order="BEFORE"
     4 
     5 keyProperty="id">
     6 
     7 select uuid()
     8 
     9 </selectKey>
    10 
    11 insert into user(id,username,birthday,sex,address)
    12 
    13        values(#{id},#{username},#{birthday},#{sex},#{address})
    14 
    15 </insert>

    注意这里使用的order是“BEFORE”,因为uuid需要我们提前生成 在插入数据库所以在insert语句之前执行。

    2、自增主键:

    1     <insert id="InsertVal" parameterType="jd.com.mybaitstest.account">
    2         <!-- id返回的设置  标签selectkey 属性keyproperty表示:account的属性名,order 获取是插入的前(before)还是后(after)返回的数据类型-->
    3         <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
    4             <!--通过数据库的内置函数SELECT LAST_INSERT_ID()获取插入的语句返回的id的值。mybaits帮我们设置到我们对象中。并设置属性是id-->
    5             SELECT LAST_INSERT_ID();
    6         </selectKey>
    7         INSERT INTO t_account(NAME ,money) VALUES(#{name},#{money});
    8     </insert>

    三、原生dao层编写:

    dao层:

     interface:

    1 package jd.com.dao;
    2 
    3 import jd.com.mybaitstest.account;
    4 
    5 public interface acci {
    6     void selecDemo(int i);
    7     void  updateDemo(account ac);
    8 }

    implement class:

     1 package jd.com.dao;
     2 
     3 
     4 import jd.com.Utils.session;
     5 import jd.com.mybaitstest.account;
     6 import org.apache.ibatis.session.SqlSession;
     7 
     8 public class acciImpl implements  acci {
     9     @Override
    10     public void selecDemo(int i) {
    11         SqlSession sqlSession=session.getSession();
    12         account ac=sqlSession.selectOne("test1.FindAccountById",i);
    13         System.out.println(ac);
    14     }
    15 
    16     @Override
    17     public void updateDemo(account ac) {
    18         SqlSession sqlSession=session.getSession();
    19         sqlSession.update("test1.UpdateById",ac);
    20         sqlSession.commit();
    21     }
    22 }

    测试程序:

     1 package jd.com.dao;
     2 
     3 import jd.com.mybaitstest.account;
     4 import org.junit.jupiter.api.Test;
     5 
     6 public class testdemodap {
     7 
     8     @Test
     9     public  void  testdemo1(){
    10         acciImpl ac1=new acciImpl();
    11         ac1.selecDemo(3);
    12         account ac=new account();
    13         ac.setMoney(3322);
    14         ac.setName("poppp");
    15         ac.setId(9);
    16         ac1.updateDemo(ac);
    17     }
    18 }

     

  • 相关阅读:
    笔记一 Redis基础
    (转载)你一定要努力,但千万别着急
    (转载)[jQuery]使用Uploadify(UploadiFive)多文件上传控件遇到的坑
    Redis学习笔记~StackExchange.Redis实现分布式Session
    转载 mvc中 将session保存到redis中 实现共享session
    webconfig配置信息转发
    2019.9.25-二分查找代码(递归和非递归方法)
    2019.9.24-常见排序算法效率比较【图】
    2019.9.24-归并排序(代码)
    2019.9.24-快速排序实现(完整代码)
  • 原文地址:https://www.cnblogs.com/evilliu/p/8927066.html
Copyright © 2011-2022 走看看