无锡网站建设推广公司,家居网站模板,在id打开wordpress,网站开发工程师缺口如果我们从数据库中读取了一个用户的两个属性——用户名和密码。此时我们希望把这两个属性放入一个java的用户对象中。我们可以选择new一个user对象#xff0c;向构造器传入我们刚刚读取的两个属性。但一旦从数据库中读取的内容变多#xff0c;我们就需要new很多新的对象。这…如果我们从数据库中读取了一个用户的两个属性——用户名和密码。此时我们希望把这两个属性放入一个java的用户对象中。我们可以选择new一个user对象向构造器传入我们刚刚读取的两个属性。但一旦从数据库中读取的内容变多我们就需要new很多新的对象。这时我们就可以通过xml和myBatis来配置一种映射关系当我从数据库中读取时自动完成java对象的创建。
1. 创建对应的类
以上面为例。要想把数据库里的数据映射成一个java对象首先我们需要有一个对应的java类来描述数据库中的这个对象。
package Mybatis;import lombok.Data;Data
public class User {String username; //名称最好和数据库字段名称保持一致不然可能会映射失败导致查询结果丢失String password;
}2.Lombok
lombok是一种可以简化代码的框架这里的Data注释表明在编译时lombok框架会自动将这个类重新编译添加一些常用方法如 toString、equals、hashCode、以及所有字段的 getter 和 setter 方法。所以在这个类里即使字段默认为protected的也没有编写getter和setter方法但是在这个类外我们依旧可以使用getter和setter方法来编辑类。
3.mapper
我们需要一种配置文件映射关系来告诉myBatis对于某一种特定的sql语句应该把sql里user的a内容映射到 java中user类的a字段上。
我们在工程文件的大目录下创建一个配置文件Mapper.xml配置文件内容如下
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
!--MyBatis 映射器MapperXML 文件用于定义 SQL 映射配置。映射器文件通常用于将数据库操作与 Java 方法关联起来。
--!-- 定义映射器命名空间通常与对应的 Java 接口或类的全限定名一致 --
mapper namespaceUser!--定义一个查询操作id 属性为该操作的唯一标识符。resultType 属性指定查询结果的返回类型这里是 com.test.entity.Student。--select idselectUser resultTypeMybatis.Userselect * from user/select!--在实际项目中查询语句通常更为复杂可以包含条件、关联查询等。这里的示例是一个简单的查询所有user的语句。--/mapper注意这一段 !-- 定义映射器命名空间通常与对应的 Java 接口或类的全限定名一致 --
mapper namespaceUser!--定义一个查询操作id 属性为该操作的唯一标识符。resultType 属性指定查询结果的返回类型--select idselectUser resultTypeMybatis.Userselect * from user/select namespace是这个mapper的名字
id指的是“select * from user”这条语句的名字起了这个名字后我们就可以在后面的java代码里用这个名字指代这条sql语句
resultType是需要映射成的类型的位置不是电脑里的路径是在java里的位置哪个包也可能不在包里看你自己哪个类在这个例子里User是类名Mybatis是User类所在的包名这个地方每个人不一样根据你的类的位置来决定。
4.在myBatis配置文件里添加mapper
当我们完成mapper之后我们需要告诉java我配置好了这个一个mapper。而myBatis和java连接就是靠我们一开始配置的哪个xml配置文件所以我们在那个配置文件里添加如下语句 mappersmapper urlfile:UserMapper.xml//mappers “file”表明这里的mapper是一个本地的file冒号后可以跟mapper文件的相对路径或绝对路径。这里是相对路径不是上面说的Java里的位置不是上面namespace属性里mapper的名字
路径exampleC:\Users\86136\projects\IdeaProjects\javaWeb\UserMapper.xml
添加完成后的完整的myBatis配置文件如下
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configuration!-- XML 配置文件的根元素包含了 MyBatis 的全局配置信息 --!-- 定义了数据库环境配置 --environments defaultdevelopment!-- 默认使用的数据库环境 --!-- 定义一个数据库环境 --environment iddevelopment!-- 事务管理器的配置 --transactionManager typeJDBC/!-- 数据源的配置 --dataSource typePOOLED!-- 数据库驱动 --property namedriver valuecom.mysql.cj.jdbc.Driver/!-- 数据库连接 URL --property nameurl valuejdbc:mysql://localhost:3306/!-- 数据库用户名 --property nameusername valueroot/!-- 数据库密码 --property namepassword value020809//dataSource/environment/environmentsmappersmapper urlfile:UserMapper.xml//mappers
/configuration5.SqlSessionFactory
我们已经配置好了myBatis当我们希望使用myBatis的时候我们就会创建一个SqlSessionFactory类在这个类里使用myBatis的各种功能。
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的我们可以通过SqlSessionFactory来创建多个新的会话——SqlSession对象你可以认为这就是之前JDBC中的Statement对象会话之间相互隔离没有任何关联。我可以通过mysql的用户界面访问数据库创建会话也可以通过idea来访问数据库这两种访问方式虽然都访问了相同的数据库但相互没有关联。
package Mybatis;import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.List;/*** 我们已经配置好了myBatis当我们希望使用myBatis的时候* 我们就会创建一个SqlSessionFactory类在这个类里使用myBatis的各种功能。*/
public class Main {public static void main(String[] args) throws FileNotFoundException {//寻找配置文件SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(new FileInputStream(myBatis_config.xml));//sqlSession就像之前的statement一样创建一个连接执行sql语句它也需要关闭所以写进trytry (SqlSession sqlSession sqlSessionFactory.openSession(true)){//这里的参数是mapper里指定的那个sql语句的名称//也就是UserMapper.xml里的id字段的名称ListUser student sqlSession.selectList(selectUser);//这行代码使用了 Java 8 引入的新特性之一称为方法引用Method Reference。// 具体来说System.out::println 是一个静态方法引用用于将 println 方法关联到 System.out 对象上。//在这里System.out::println 等效于 lambda 表达式 (s) - System.out.println(s)。// 它表示将遍历 student 集合的每个元素并将每个元素传递给 System.out.println 方法实现在控制台上打印每个元素的效果。student.forEach(System.out::println);}}
}运行后应该可以打印出数据库的全部内容并且list中存放了和数据库等大小的user对象