阅读 174

MyBatis环境配置和方法使用

MyBatis环境配置和方法使用

MyBatis环境配置和方法使用

1.MyBatis

MyBatis 是一款优秀的持久层框架,它可以避免JDBC的连接配置和获取结果集等操作的代码繁琐,简略这些步骤。


可以解除sql的耦合,方便代码的维护和管理。而且简单,jar包少,没有第三方依赖。


需要的jar包(在maven中配置)


<!--MyBatis的jar包 -->

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->

<dependency>

    <groupId>org.mybatis</groupId>

    <artifactId>mybatis</artifactId>

    <version>3.5.6</version>

</dependency>



<!--mysql的jar包 -->

<dependency>

   <groupId>mysql</groupId>

   <artifactId>mysql-connector-java</artifactId>

   <version>5.1.47</version>

</dependency>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

2.MyBatis的环境配置

在resource中创建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.cj.jdbc.Driver"/>

               <property name="url" value="jdbc.url=jdbc:mysql://localhost:3306/web_work?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=UTC&amp;rewriteBatchedStatements=true"/>

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

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

           </dataSource>

       </environment>

   </environments>

   <mappers>

    <!--这里填写和mapper的xml的路径来进行配置连接 -->

       <mapper resource="resource/userMapper.xml"/>

   </mappers>

</configuration>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

我们还需要设置一个工具类来使用调用这些MyBatis,我们可以设置static来定义这些方法,这样我们在调用这些工具类的时候就不需要繁琐调用这些方法


import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;

import java.io.InputStream;


public class MybatisUtils {


   private static SqlSessionFactory sqlSessionFactory;


   static {

       try {

        //获取sqlSessionFactory 对象

           String resource = "mybatis-config.xml";

           InputStream inputStream = Resources.getResourceAsStream(resource);

           sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

      } catch (IOException e) {

           e.printStackTrace();

      }

  }


    //获取SqlSession连接

   public static SqlSession getSession(){

       return sqlSessionFactory.openSession();

  }


}

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

这样我们编写mapper时只要简单的调用


SqlSession sqlsession = MybatisUtils.getSession(); 

1

我们需要一个mapper可以来配对这些配置文件,简单创建一个mapper


import com.nicht.pojo.User;

import java.util.List;


public interface UserMapper {

//简单查询功能

   List<User> selectUser();

}

1

2

3

4

5

6

7

然后给这个mapper类编写一个Mapper.xml的配置文件来配对(个人建议放在resource文件中,方便管理)


<?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文件路径-->

<mapper namespace="com.nicht.mapper.UserMapper">

<!--mapper中所对应的方法名   和sql表所对应的user类 -->

 <select id="selectUser" resultType="com.nicht.pojo.User">

  select * from Mybatis.user

  <!-- Mybatis其下的user表-->

 </select>

</mapper>

1

2

3

4

5

6

7

8

9

10

11

12

所以当我们调用这个mapper的方法时候,系统能找到所对应的的mapper对应文件来进行sql语句的执行


3.测试面板

public class MyTest {

   @Test

   public void selectUser() {

       SqlSession session = MybatisUtils.getSession();

       //UserMapper.class中用到了反射的原理

       UserMapper mapper = session.getMapper(UserMapper.class);

       List<User> users = mapper.selectUser();


       for (User user: users){

           System.out.println(user);

      }

       session.close();

       //一定要记得关闭session

  }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

到这时候我们发现每个mapper的方法都要配置一个mapper.xml的文件,不会那么简便,所以就有了MyBatisPlus的诞生,之后我将会探讨到


4.MyBatis中的CRUD(增删改查)操作

在上面我已经简单列举MyBatis中遍历数据库的功能,现在来说说增删改查的操作


要想配置这些sql语句我们要在mapper中创造相对应的方法


1.查询(根据id来查询):

在UserMapper中添加对应方法


public interface UserMapper {

   //查询全部用户

   List<User> selectUser();

   //根据id查询用户

   User selectUserById(int id);

}

1

2

3

4

5

6

在mapper.xml中配置对应方法


<!--parameterType 为传入参数的参数类型   resultType 为返回的参数类型-->

<select id="selectUserById" resultType="com.nicht.pojo.User" parameterType="int">

select * from Mybatis.user where id = #{id}

</select>

1

2

3

4

调用:


public void tsetSelectUserById() {

   SqlSession session = MybatisUtils.getSession();  //获取SqlSession连接

   UserMapper mapper = session.getMapper(UserMapper.class);

   User user = mapper.selectUserById(1);

   System.out.println(user);

   session.close();

1

2

3

4

5

6

如果我们遇到需要两个参数该怎么办?

可以在mapper中的方法中的参数前面加上 @Param。

这样我们在xml文件就可以直接取到


User selectUserById(@Param("Id") String username,@Param("name") String pwd);

1

在xml中可以直接取到就不需要parameterType来定义参数类型


 <select id="selectUserByNP" resultType="com.nicht.pojo.User">

     select * from user where name = #{name} and id = #{id}

   </select>

1

2

3

2.增加:

在UserMapper中添加对应方法


public interface UserMapper {

   //查询全部用户

   List<User> selectUser();

   //根据id查询用户

   User selectUserById(int id);

   //增加用户

   int addUser(User user);

1

2

3

4

5

6

7

在mapper.xml中配置:


<insert id="addUser" parameterType="com.nicht.pojo.User">

    insert into Mybatis.user (id,name,year) values (#{id},#{name},#{year})

</insert>

1

2

3

测试:


public void testAddUser() {

   SqlSession session = MybatisUtils.getSession();

   UserMapper mapper = session.getMapper(UserMapper.class);

   User user = new User(2,"孙笑川","60");

   int i = mapper.addUser(user);

   System.out.println(i);

   session.commit(); //提交事务,重点!不写的话不会提交到数据库

   session.close();

1

2

3

4

5

6

7

8

注意:在增删改的操作后,我们要提交事物给数据库,要不然无法获得数据库响应:

session.commit();


3.修改:

在UserMapper中添加对应方法


public interface UserMapper {

   //查询全部用户

   List<User> selectUser();

   //根据id查询用户

   User selectUserById(int id);

   //增加用户

   int addUser(User user);

   //修改用户

   int updateUser(User user);

1

2

3

4

5

6

7

8

9

在mapper.xml中配置:


<update id="updateUser" parameterType="com.kuang.pojo.User">

  update Mybatis.user set name=#{name},year=#{year} where id = #{id}

</update>

1

2

3

测试:


public void testAddUser() {

   SqlSession session = MybatisUtils.getSession();

   UserMapper mapper = session.getMapper(UserMapper.class);

   User user = new User(2,"韩金龙","20");

   int i = mapper.update(user);

   System.out.println(i);

   session.commit(); //提交事务,重点!不写的话不会提交到数据库

   session.close();


1

2

3

4

5

6

7

8

9

也可以依靠查询的方法来获得对应的id目标实体类


public void testUpdateUser() {

   SqlSession session = MybatisUtils.getSession();

   UserMapper mapper = session.getMapper(UserMapper.class);

   User user = mapper.selectUserById(1);//依靠查询方法获得目标实体类

   user.setname("韩金龙");

   user.setyear("20");

   int i = mapper.updateUser(user);

   System.out.println(i);

   session.commit(); //提交事务,重点!不写的话不会提交到数据库

   session.close();

}

1

2

3

4

5

6

7

8

9

10

11

4.删除:

在UserMapper中添加对应方法


public interface UserMapper {

   //查询全部用户

   List<User> selectUser();

   //根据id查询用户

   User selectUserById(int id);

   //增加用户

   int addUser(User user);

   //修改用户

   int updateUser(User user);

   //删除用户

   int deleteUser(int id);

1

2

3

4

5

6

7

8

9

10

11

在mapper.xml中配置:


<delete id="deleteUser" parameterType="int">

  delete from Mybatis.user where id = #{id}

</delete>


1

2

3

4

测试:


public void testDeleteUser() {

   SqlSession session = MybatisUtils.getSession();

   UserMapper mapper = session.getMapper(UserMapper.class);

   int i = mapper.deleteUser(2);

   System.out.println(i);

   session.commit(); //提交事务,重点!不写的话不会提交到数据库

   session.close();

}

————————————————

版权声明:本文为CSDN博主「瞎眼望人间」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/a1369791292/article/details/114684347


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐