java框架myba_JAVA框架 Mybaits

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

一:jar包下载:

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

我使用的版本是3.2,7

cbdc793e295164717f0dbefee2c57cdf.png

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

pom.xml文件内容:

1

2

3 UTF-8

4 1.8

5 1.8

6

7

8

9

10 org.slf4j

11 slf4j-log4j12

12 1.7.5

13

14

15 org.slf4j

16 slf4j-api

17 1.7.5

18

19

20 org.apache.logging.log4j

21 log4j-core

22 2.0.2

23

24

25 org.apache.logging.log4j

26 log4j-api

27 2.0.2

28

29

30 mysql

31 mysql-connector-java

32 5.1.34

33

34

35 log4j

36 log4j

37 1.2.17

38

39

40 org.javassist

41 javassist

42 3.16.1-GA

43

44

45 commons-logging

46 commons-logging

47 1.1.1

48

49

50 cglib

51 cglib

52 2.2.2

53

54

55 asm

56 asm

57 3.3.1

58

59

60 org.mybatis

61 mybatis

62 3.2.7

63

64

65 junit

66 junit

67 4.11

68 test

69

70

71 org.junit.jupiter

72 junit-jupiter-api

73 RELEASE

74

75

mybaits的配置文件说明:

06be2cde0d05029cb184d7e33c386aed.png

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

1 <?xml version="1.0" encoding="UTF-8" ?>

2 /p>

4 "http://mybatis.org/dtd/mybatis-3-config.dtd">

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

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

1 <?xml version="1.0" encoding="UTF-8" ?>

2 /p>

4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

5

6

7 SELECT * FROM t_account WHERE id=#{id};8

9

10

11

12 SELECT * FROM t_account WHERE NAME LIKE '%${value}%';13

14

15

16

17

18

19

20 SELECT LAST_INSERT_ID();21

22 INSERT INTO t_account(NAME ,money) VALUES(#{name},#{money});23

24

25 DELETE FROM t_account WHERE id=#{id};26

27

28 UPDATE t_account SET money=#{money} WHERE id=#{id};29

30

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 classtestmyba {14

15

16 @Test17 public voidtestdemo1() throws IOException {18 //查询单条数据

19 String resouce="SqlMapConfig.xml";20 InputStream inputStream=Resources.getResourceAsStream(resouce);21 SqlSessionFactory sqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);22 SqlSession sqlSession=sqlSessionFactory.openSession();23 account ac=sqlSession.selectOne("test1.FindAccountById",2);24 System.out.println(ac);25 }26 @Test27 public voidtestdemo2() throws IOException {28 String resource="SqlMapConfig.xml";29 //获取主配置文件流

30 InputStream inp=Resources.getResourceAsStream(resource);31 //创建数据库回话

32 SqlSession sqlSession=newSqlSessionFactoryBuilder().build(inp).openSession();33 List list=sqlSession.selectList("test1.FindUsernameByNanme","ok");34 System.out.println(list);35

36 }37 @Test38 public voidtestInsertdemo() throws IOException {39 String resource="SqlMapConfig.xml";40 InputStream inp=Resources.getResourceAsStream(resource);41 SqlSessionFactory sqlSessionFactory=newSqlSessionFactoryBuilder().build(inp);42 SqlSession sqlSession=sqlSessionFactory.openSession();43 account ac=newaccount();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 @Test52 public voiddeleteDemo() throws IOException {53 String resource="SqlMapConfig.xml";54 InputStream inp=Resources.getResourceAsStream(resource);55 SqlSession sqlSession=newSqlSessionFactoryBuilder().build(inp).openSession();56 sqlSession.delete("test1.DeletAccoutnById",2);57 sqlSession.commit();58 }59 @Test60 public voidupdateById() throws IOException {61 String resource="SqlMapConfig.xml";62 InputStream inp=Resources.getResourceAsStream(resource);63 SqlSession sqlSession=newSqlSessionFactoryBuilder().build(inp).openSession();64 account ac=newaccount();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

2

3

4

5 keyProperty="id">

6

7 selectuuid()8

9

10

11 insert into user(id,username,birthday,sex,address)12

13 values(#{id},#{username},#{birthday},#{sex},#{address})14

15

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

2、自增主键:

1

2

3

4

5 SELECT LAST_INSERT_ID();6

7 INSERT INTO t_account(NAME ,money) VALUES(#{name},#{money});8

三、原生dao层编写:

dao层:

interface:

1 package jd.com.dao;2

3 import jd.com.mybaitstest.account;4

5 public interfaceacci {6 void selecDemo(inti);7 voidupdateDemo(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 classacciImpl implements acci {9 @Override10 public void selecDemo(inti) {11 SqlSession sqlSession=session.getSession();12 account ac=sqlSession.selectOne("test1.FindAccountById",i);13 System.out.println(ac);14 }15

16 @Override17 public voidupdateDemo(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 classtestdemodap {7

8 @Test9 public voidtestdemo1(){10 acciImpl ac1=newacciImpl();11 ac1.selecDemo(3);12 account ac=newaccount();13 ac.setMoney(3322);14 ac.setName("poppp");15 ac.setId(9);16 ac1.updateDemo(ac);17 }18 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值