搭建MyBatis框架。
步骤:
-
首先,在项目中引入MyBatis依赖。在Maven中添加以下依赖:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.3</version> </dependency>
-
接下来,需要编写MyBatis的配置文件。该文件描述了MyBatis应如何连接数据库以及如何映射数据。
在src/main/resources目录下,创建一个名为
mybatis-config.xml
的文件,并添加以下内容:<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- MyBatis核心配置文件中的标签必须按照指定的顺序进行配置 (properties?,settings?,typeAliases?,typeHandlers?, objectFactory?,objectWrapperFactory?,plugins?,environments?, databaseIdProvider?,mappers?)" --> <!--引入properties配置文件,此后就可以在当前文件中使用的方式来访问value--> <properties resource="jdbc.properties"/> <!-- typeAliases:设置类型别名,即为某个具体的类型设置一个别名 在mybatis的范围中,可以使用别名表示这个具体的类型 --> <typeAliases> <!-- typeAlias:type:设置需要取别名的类型 alias:设置的别名 如果不设置alias则默认这个类的类名为别名,且不区分大小写 --> <!--<typeAlias type="com.atguigu.mybatis.pojo.User" alias="abc"></typeAlias>--> <!-- 如果文件太多的话可以直接把这个包下面的所有文件都设置别名,使用package标签,那么下面的所有文件都有了默认的别名 <package name="com.atguigu.mybatis.pojo"/> --> <package name="com.zhazhawei.mybatis.pojo"/> </typeAliases> <!-- 配置连接数据库的环境 default:设置默认使用的环境的id id:设置环境的唯一标识,不能重复 --> <environments default="development"> <environment id="development"> <!-- transactionManager:设置事物管理器 属性: type:设置事务管理的方式 type=“JDBC/MANAGED” jdbc:表示使用JDBC中原生的管理方式 MANAGED:被管理,例如spring --> <transactionManager type="JDBC"/> <!-- dataSource:设置数据源 属性: type:设置数据源的类型 type=“POOLED/UNPOOLED/JNDI” POOLED:表示使用数据库连接池 UNPOOLED:表示不使用数据库连接池,每次使用的时候都会创建连接 JNDI:表示使用上下文中的数据源 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/><!--设置连接的驱动--> <property name="url" value="${jdbc.url}"/><!--设置连接数据库的地址--> <property name="username" value="${jdbc.username}"/><!--设置连接数据库的用户名--> <property name="password" value="${jdbc.password}"/><!--设置连接数据库用户名的密码--> </dataSource> </environment> <environment id="test"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/><!--设置连接的驱动--> <property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/><!--设置连接数据库的地址--> <property name="username" value="root"/><!--设置连接数据库的用户名--> <property name="password" value="123456"/><!--设置连接数据库用户名的密码--> </dataSource> </environment> </environments> <!--引入mybatis的映射文件--> <!--sql语句是写入映射文件的,通过这个大的配置文件去访问映射文件来调用里面的sql语句--> <mappers> <!--<mapper resource="mappers/UserMapper.xml"/>--> <!-- 以包的方式来引入映射文件,但是必须满足两个条件 1.mapper接口和映射文件所在的包必须一致 2.mapper接口的名字和映射文件的名字必须一致 --> <package name="com.zhazhawei.mybatis.mapper"/><!--使用package字段可以将这个目录下的所有接口都注册到mybatis中,就不用后续新建接口时重新添加了--> </mappers> </configuration>
可以选择使用jdbc配置文件的方式定义连接数据库的地址,也可以通过直接用代码的方式定义数据库的连接信息
id为development就是使用的配置文件方式
id为test使用的是直接在代码里明确写好的连接信息。两者都行
在同级目录下创建jdbc.properties文件,以下是内容,
jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC jdbc.username=root jdbc.password=123456
-
创建一个用户类,里面的属性和你数据库中的字段名一致,同时建立他们的空参构造,有参构造,get/set方法。
package com.atguigu.mybatis.pojo; public class User { private Integer id; private String username; private String password; private Integer age; private String sex; private String email; public User(Integer id, String username, String password, Integer age, String sex, String email) { this.id = id; this.username = username; this.password = password; this.age = age; this.sex = sex; this.email = email; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public User() { } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", age=" + age + ", sex='" + sex + '\'' + ", email='" + email + '\'' + '}'; } }
-
创建一个Mapper接口并定义SQL语句的名、类型、参数等。
配置文件的名字要和mapper接口的名字一致 -
在UserMapper.xml文件中编写sql语句。
您需要将Mapper接口添加到
<mappers>
标记中。例如,如果您的Mapper接口位于com.example.mapper
包中,您可以添加以下行:<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zhazhawei.mybatis.mapper.UserMapper"><!--namespace的地址为你接口的路径--> <!-- mapper接口和映射文件要保证两个一致! 1.mapper接口的全类名和映射文件的namespace保持一致 2.mapper接口中的方法的方法名要和映射文件中的sql的id保持一致!!! 下面这个id必须和你接口中定义的sql语句的名字一致 --> <select id="getUserByUsername" resultType="User"> select * from t_user where username=#{username} </select> </mapper>
-
创建一个工具类,目的是调用这个工具类直接获得sqlsession,也就是mybatis提供的数据库操作对象
package com.atguigu.mybatis.utils; 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 SqlSessionUtil { public static SqlSession getSqlSession(){ // //获取核心配置文件的输入流 // InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); // //获取sqlSessionFactoryBuilder对象 // SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); // //通过sqlSessionFactoryBuilder对象获取配置文件输入流is的SqlSessionFactory对象 // SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); // //通过SqlSessionFactory对象获取sql的会话对象sqlsession,是mybatis提供的数据库操作对象 // SqlSession sqlSession = sqlSessionFactory.openSession(); // return sqlSession; // SqlSession sqlSession = null; try { InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); sqlSession = sqlSessionFactory.openSession(true); } catch (IOException e) { throw new RuntimeException(e); } return sqlSession; } }
-
测试,根据你编写的sql语句进行测试
package com.zhazhawei.mybatis.test; import com.zhazhawei.mybatis.mapper.SelectMapper; import com.zhazhawei.mybatis.pojo.User; import com.zhazhawei.mybatis.utils.SqlSessionUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; import java.util.Map; /* * @author : ZXW * @date : 2023/4/21 17:00 * @Description: */ public class SelectMapperTest { @Test public void selectByAll(){ SqlSession sqlSession = SqlSessionUtil.getSqlSession(); SelectMapper mapper = sqlSession.getMapper(SelectMapper.class); List<User> users = mapper.selectAllUsers(); users.forEach(System.out::println); } }