好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

MyBatis开发Dao层的两种方式实现(原始Dao层开发)

本文将介绍使用框架mybatis开发原始dao层来对一个对数据库进行增删改查的案例。

mapper动态代理开发dao层请阅读我的下一篇博客: mybatis开发dao层的两种方式(mapper动态代理方式)

本次使用的mybatis版本为mybatis-3.2.7,开发工具为eclipse,数据库为mysql,jdk版本jdk1.8.0_151。

sqlsession使用范围

sqlsessionfactorybuilder

通过sqlsessionfactorybuilder创建会话工厂sqlsessionfactory 将sqlsessionfactorybuilder当成一个工具类使用即可,不需要使用单例管理sqlsessionfactorybuilder。 在需要创建sqlsessionfactory时候,只需要new一次sqlsessionfactorybuilder即可。

sqlsessionfactory

通过sqlsessionfactory创建sqlsession,使用单例模式管理sqlsessionfactory(工厂一旦创建,使用一个实例)。 将来mybatis和spring整合后,使用单例模式管理sqlsessionfactory。

sqlsession

sqlsession是一个面向用户(程序员)的接口。 sqlsession中提供了很多操作数据库的方法:如:selectone(返回单个对象)、selectlist(返回单个或多个对象)、。 sqlsession是线程不安全的,在sqlsesion实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性。 sqlsession最佳应用场合在方法体内,定义成局部变量使用。

1、首先,使用eclipse新建一个java工程,在lib目录下加入mybatis核心包、依赖包、数据驱动包,然后buildpath一下。。

2、添加日志文件,在classpath下创建log4j.properties如下:

?

1

2

3

4

5

6

# global logging configuration

log4j.rootlogger=debug, stdout

# console output...

log4j.appender.stdout=org.apache.log4j.consoleappender

log4j.appender.stdout.layout=org.apache.log4j.patternlayout

log4j.appender.stdout.layout.conversionpattern=%5p [%t] - %m%n

3、在classpath下创建config资源文件夹,并在config文件夹下创建sqlmapconfig.xml,如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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

   <!-- 使用jdbc事务管理-->

    <transactionmanager type= "jdbc" />

   <!-- 数据库连接池-->

    <datasource type= "pooled" >

     <property name= "driver" value= "com.mysql.jdbc.driver" />

     <property name= "url" value= "jdbc:mysql://localhost:3306/mybatis?characterencoding=utf-8" />

     <property name= "username" value= "root" />

     <property name= "password" value= "root" />

    </datasource>

   </environment>

  </environments>

</configuration>

sqlmapconfig.xml是mybatis核心配置文件,上边文件的配置内容为数据源、事务管理。

4、创建数据封装使用的user类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

package com.xyfer.po;

 

import java.util.date;

/**

  *

  * @author xyfer

  * 数据封装使用的user类

  *

  */

public class user {

 

  private int   id;   //id

  private string username; //姓名

  private string sex;   //性别

  private date  birthday; // 生日

  private string address;  // 地址

  public int getid() {

   return id;

  }

  public void setid( int id) {

   this .id = id;

  }

  public string getusername() {

   return username;

  }

  public void setusername(string username) {

   this .username = username;

  }

  public string getsex() {

   return sex;

  }

  public void setsex(string sex) {

   this .sex = sex;

  }

  public date getbirthday() {

   return birthday;

  }

  public void setbirthday(date birthday) {

   this .birthday = birthday;

  }

  public string getaddress() {

   return address;

  }

  public void setaddress(string address) {

   this .address = address;

  }

 

}

5、在classpath下的资源文件夹sqlmapper目录下创建sql映射文件user.xml:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

<?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= "test" >

  <!-- 根据id查询用户 -->

  <select id= "finduserbyid" parametertype= "int" resulttype= "com.xyfer.po.user" >

   select * from user where id = #{id}

  </select>

  <!-- 添加用户 -->

  <insert id= "insertuser" parametertype= "com.xyfer.po.user" >

  <selectkey keyproperty= "id" order= "after" resulttype= "java.lang.integer" >

   select last_insert_id()

  </selectkey>

   insert into user(username,birthday,sex,address)

   values(#{username},#{birthday},#{sex},#{address})

  </insert>

  <!-- 修改用户 -->

  <update id= "updateuser" parametertype= "com.xyfer.po.user" >

   update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}

   where id=#{id}

  </update>

  <!-- 删除用户 -->

  <delete id= "deleteuserbyid" parametertype= "int" >

   delete from user where id=#{id}

  </delete>

</mapper>

6、mybatis框架需要加载映射文件,将users.xml添加在sqlmapconfig.xml,如下:

?

1

2

3

<mappers>

   <mapper resource= "user.xml" />

</mappers>

7、dao层接口

?

1

2

3

4

5

6

7

8

9

package com.xyfer.dao;

import com.xyfer.po.user;

public interface userdao {

  public user getuserbyid( int id); //根据id值查询一个用户

  public void insertuser(user user); //新增一个用户

  public void updateuser(user user); //修改一个用户

  public void deleteuser( int id); //删除一个用户

 

}

dao层接口实现类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

package com.xyfer.dao.impl;

import org.apache.ibatis.session.sqlsession;

import org.apache.ibatis.session.sqlsessionfactory;

import com.xyfer.dao.userdao;

import com.xyfer.po.user;

 

public class userdaoimpl implements userdao {

  //注入sqlsessionfactory

  public userdaoimpl(sqlsessionfactory sqlsessionfactory){

    this .setsqlsessionfactory(sqlsessionfactory);

   }

   

  private sqlsessionfactory sqlsessionfactory;

  

  public sqlsessionfactory getsqlsessionfactory() {

   return sqlsessionfactory;

  }

 

  public void setsqlsessionfactory(sqlsessionfactory sqlsessionfactory) {

   this .sqlsessionfactory = sqlsessionfactory;

  }

 

  @override

  public user getuserbyid( int id) {

   sqlsession session = sqlsessionfactory.opensession();

   user user = null ;

   try {

    //通过sqlsession调用selectone方法获取一条结果集

    //参数1:指定定义的statement的id,参数2:指定向statement中传递的参数

    user = session.selectone( "test.finduserbyid" , 1 );

    system.out.println(user);

      

   } finally {

    session.close();

   }

   return user;

  }

 

  @override

  public void insertuser(user user) {

   sqlsession sqlsession = sqlsessionfactory.opensession();

   try {

    sqlsession.insert( "test.insertuser" , user);

    sqlsession测试数据mit();

   } finally {

    sqlsession.close();

   }

  }

 

  @override

  public void updateuser(user user) {

   sqlsession sqlsession = sqlsessionfactory.opensession();

   try {

    sqlsession.update( "test.updateuser" , user);

    sqlsession测试数据mit();

   } finally {

    sqlsession.close();

   }

  }

 

  @override

  public void deleteuser( int id) {

   sqlsession sqlsession = sqlsessionfactory.opensession();

   try {

    sqlsession.update( "test.deleteuserbyid" , id);

    sqlsession测试数据mit();

   } finally {

    sqlsession.close();

   }

  }

}

8、创建一个junit的测试类,对userdao进行测试。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

package com.xyfer.dao.impl;

import static org.junit. assert .*;

import java.io.inputstream;

import java.util.date;

import org.apache.ibatis.io.resources;

import org.apache.ibatis.session.sqlsessionfactory;

import org.apache.ibatis.session.sqlsessionfactorybuilder;

import org.junit.before;

import org.junit.test;

import com.xyfer.dao.userdao;

import com.xyfer.po.user;

public class userdaoimpltest {

 

  private sqlsessionfactory sqlsessionfactory;

 

  @before

  public void init() throws exception {

   sqlsessionfactorybuilder sessionfactorybuilder = new sqlsessionfactorybuilder();

   inputstream inputstream = resources.getresourceasstream( "sqlmapconfig.xml" );

   sqlsessionfactory = sessionfactorybuilder.build(inputstream);

  }

 

  @test

  public void testgetuserbyid() {

   userdao userdao = new userdaoimpl(sqlsessionfactory);

   user user = userdao.getuserbyid( 22 );

   system.out.println(user);

  }

 

  @test

  public void testinsertuser() {

   user user = new user();

   user.setusername( "小李" );

   user.setsex( "男" );

   user.setbirthday( new date());

   user.setaddress( "杭州市" );

   userdao userdao = new userdaoimpl(sqlsessionfactory);

   userdao.insertuser(user);

  }

 

  @test

  public void testupdateuser() {

   user user = new user();

   user.setid( 10 );

   user.setusername( "小威" );

   user.setsex( "男" );

   user.setbirthday( new date());

   user.setaddress( "杭州市" );

   userdao userdao = new userdaoimpl(sqlsessionfactory);

   userdao.updateuser(user);

  }

 

  @test

  public void testdeleteuser() {

   userdao userdao = new userdaoimpl(sqlsessionfactory);

   userdao.deleteuser( 10 );

  }

}

以上步骤,完成使用mybatis框架开发原始dao层,并对数据库进行增删改查操作。

需要注意的是,上文提到的config文件夹和sqlmapper文件夹均为资源文件夹(source folder),默认会加载该路径下的文件。希望对大家的学习有所帮助,也希望大家多多支持。

原文链接:http://HdhCmsTestcnblogs测试数据/xyfer1018/p/10111817.html

查看更多关于MyBatis开发Dao层的两种方式实现(原始Dao层开发)的详细内容...

  阅读:18次