万金流
初次使用博客园,目前感觉还不错。 不知不觉用了4年零4个月了,越来越喜欢博客园。

基础资料:

数据库:d1,表:t1,字段:xm,nl(即姓名、年龄),内容('zs',20;'ls',18)

以下内容由官网“https://mybatis.org/mybatis-3/zh/getting-started.html”整理而来。不尽不实之处请参考官网原文。

思想:

1、在pom.xml文件中除了给出mybatis和jdbc的依赖之外,还应给出资源(配置)文件位置。

2、在mybatis配置文件“mybatis-config.xml”中写入信息。主要为驱动、服务器、表配置文件信息。

3、给出与表记录对应的java类(t1.java)

4、创建接口文件"t1Mapper.java",约定要进行的数据库操作。(相当于操作数据库表的接口)

操作手册见官网,中文的,很长。一般用,看下面就差不多了。

5、创建表配置文件(如“t1Mapper.xml”),写入操作对应的sql语句。(相当于实现接口)

6、编写调用程序。


 步骤:

1、新建项目( mvn -B archetype:generate -DgroupId=hc -DartifactId=p2 -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 )。

目录结构:

修改pom.xml文件:

修改jdk版本,略

添加依赖(第13行定位)

 1     <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
 2   <dependency>
 3     <groupId>org.mybatis</groupId>
 4     <artifactId>mybatis</artifactId>
 5     <version>3.5.13</version>
 6   </dependency>
 7   <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
 8 <dependency>
 9     <groupId>com.mysql</groupId>
10     <artifactId>mysql-connector-j</artifactId>
11     <version>8.1.0</version>
12 </dependency>
13 </dependencies>

添加资源文件(xml),第11行定位

 1 <resources>
 2             <resource>
 3                 <directory>src/main/java/hc/data</directory>
 4                 <includes>
 5                     <include>**/*.properties</include>
 6                     <include>**/*.xml</include>
 7                 </includes>
 8                 <filtering>true</filtering>
 9             </resource>
10         </resources>
11   </build>

2、创建并写入mybatis配置文件“mybatis-config.xml”

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4   "https://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6   <environments default="development">
 7     <environment id="development">
 8       <transactionManager type="JDBC"/>
 9       <dataSource type="POOLED">
10         <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
11         <property name="url" value="jdbc:mysql://xxx.xxx.xxx.xxx:xxx/d1?useSSL=false"/>
12         <property name="username" value="root"/>
13         <property name="password" value="xxxxxxxx"/>
14       </dataSource>
15     </environment>
16   </environments>
17   <mappers>
18     <mapper resource="t1Mapper.xml"/>
19   </mappers>
20 </configuration>

注意:

第11行和第13行按实际情况填写。

第10行,对于mysql5.x,应该不要中间的“cj”。

第17-19行,指出一张表(t1)的操作命令(增删改查)对应的内容

3、在实体(entity)文件夹下,写出需要的表类t1.java(通常为表中记录对应的类,此处为了省事,仅使用字段)

1 package hc.entity;
2 
3 public class t1 {
4     public String xm;
5     public int nl;
6 }

4、编写接口文件t1Mapper.java,设计操作数据表t1的方法和结果

1 package hc.data;
2 import hc.entity.t1;
3 public interface t1Mapper {
4     t1 getByXm(String xm);
5 }

5、创建“t1Mapper.xml”,对具体操作进行定义。(即用xml的形式,实现t1Mapper.java的接口)

1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper
3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4   "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
5 <mapper namespace="hc.data.t1Mapper">
6   <select id="getByXm" resultType="hc.entity.t1">
7     select * from t1 where xm = #{xm}
8   </select>
9 </mapper>

说明:

第5行,名称空间应对应接口的类全名。

第6行,id是这条命令的名字,对应接口文件的方法名;结果类型为对应的java类(注意带上包名)。

第7行,#模式不用考虑数据类型问题(即引号问题)。

参数如果是类对象,可以在#{}里面直接写属性。

如果有多个参数,可以在类接口里,参数前面用 @Param("变量名") 注解标识出来,在xml中直接使用#{变量名}。

作为返回结果,如果表结构的字段与实体字段有差异,MyBatis会尝试进行转换。如果不行,最简单的做法是在sql里用as对筛选结果字段重命名,贴合实体类。

未尽事宜,可参考前述官网教程。

6、主程序App.java

 1 package hc;
 2 
 3 import java.io.InputStream;
 4 
 5 import org.apache.ibatis.io.Resources;
 6 import org.apache.ibatis.session.SqlSession;
 7 import org.apache.ibatis.session.SqlSessionFactory;
 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 9 
10 import hc.data.t1Mapper;
11 import hc.entity.t1;
12 
13 public class App 
14 {
15     public static void main( String[] args ) throws Exception
16     {
17         String resource = "mybatis-config.xml";
18         InputStream inputStream = Resources.getResourceAsStream(resource);
19         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
20 
21         try (SqlSession session = sqlSessionFactory.openSession())
22         {
23             //t1 myt1 = session.selectOne("getByXm","ls");
24             t1Mapper mapper=session.getMapper(t1Mapper.class);
25             t1 myt1 = mapper.getByXm("zs");
26             System.out.println(myt1.xm);
27             System.out.println(myt1.nl);
28         }
29         catch (Exception e) {
30             // TODO: handle exception
31             System.out.println(e.getMessage());
32         }
33     }
34 }

说明:

按官方说法,工厂应在应用中长期存在;session应随着每次请求申请和释放。此处为简单测试例子,可以不做理会。

第23行与(24、25)行等效。

在第23行中,因为“getByXm”方法在所有程序中唯一,故前缀"hc.data.t1Mapper."可以省去。

cmd运行结果:

 (完)

posted on 2023-10-26 19:25  万金流  阅读(248)  评论(0编辑  收藏  举报