Java console app 即控制台程序。在console app中使用Mybatis可以更简单、直接的理解Mybatis。工程目录结构入下:
目录结构
所有包路径在这里查看:
分布构建:
- 建立console app工程:
使用idea 社区版或其他 IDE 创建Maven支持java console app的工程;- image.png
- image.png
- image.png
- 添加依赖项(dependencies):
- 这里使用 h2 嵌入式数据库
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>ConsoleMybatis</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <!-- https://mvnrepository.com/artifact/com.h2database/h2 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.200</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency> </dependencies> </project>
- 添加实体类User如下:
package domain;
public class User {
private String id;
private String name;
private String sex;
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getSex() {
return sex;
}
public void setId(String id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setSex(String sex) {
this.sex = sex;
}
}
-
新建 Mybatis 配置文件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="test"> <environment id="test"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="org.h2.Driver"/> <property name="url" value="jdbc:h2:file:E:\\temp\\h2test"/> <property name="username" value="admin"/> <property name="password" value="admin"/> </dataSource> </environment> </environments> <!-- 映射器 --> <mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers> </configuration> ```
-
添加 mapper 文件UserMapper.xml如下:
<?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="dao.IDaoUser"> <resultMap id="Users" type="domain.User"> <id column="id" property="id" /> <id column="name" property="name" /> <id column="sex" property="sex" /> </resultMap> <!--if exists drop table--> <update id="dropTable" parameterType="java.lang.String"> drop table if exists ${table} </update> <!--create table --> <update id="createTable" parameterType="java.lang.String"> ${sql} </update> <!--insert user to user table--> <insert id="insertUser"> insert into user (id, name, sex) values(#{id}, #{name}, #{sex}) </insert> <!--select table--> <select id="selectAll" parameterType="java.lang.String" resultMap="Users"> select * from ${table} </select> </mapper>
-
添加dao文件 IDaoUser 类:
package dao; import domain.User; import org.apache.ibatis.annotations.Param; import java.util.List; public interface IDaoUser { public void dropTable(@Param("table") String table); public void createTable(@Param("sql") String sql); public void insertUser(@Param("id") String id, @Param("name") String name,@Param("sex") String sex); public List<User> selectAll(@Param("table") String table); }
-
添加ConsoleMain类:
import dao.IDaoUser; import domain.User; 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; import java.util.List; import java.util.UUID; public class ConsoleMain { public static void main(String[] argv){ try( InputStream inputStream = org.apache.ibatis.io.Resources.getResourceAsStream("mybatis-config.xml") ){ SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); try( SqlSession sqlSession = sqlSessionFactory.openSession() ){ IDaoUser user = sqlSession.getMapper(IDaoUser.class); if(null != user){ user.dropTable("user"); user.createTable("create table user(id varchar(36) primary key, name varchar(100), sex varchar(4))"); user.insertUser(UUID.randomUUID().toString(), "小青","男"); user.insertUser(UUID.randomUUID().toString(), "小红","女"); user.insertUser(UUID.randomUUID().toString(), "小紫","男"); user.insertUser(UUID.randomUUID().toString(), "小兰","女"); user.insertUser(UUID.randomUUID().toString(), "小虎","男"); user.insertUser(UUID.randomUUID().toString(), "小白","女"); List<User> users = user.selectAll("user"); for(User var : users){ System.out.println(var.getId() + "," + var.getName() + "," + var.getSex()); } } } }catch (IOException e){ e.printStackTrace(); } } }
编译运行:
image.png注意事项:
-
Maven h2 依赖文件中默认是 test scope,此处默认是测试有效,console 项目中需要删除;
image.png - mapper文件中注意分清 #、 $ 占位符的区别:
- 参考:Mybatis 数据库框架 mapper文件中 # 与 $ 符号的区别
- #{} : 根据参数的类型进行合适的处理(比如传入String类型,会为参数加上双引号,如果传入Integer类型数据,则不会为参数加上双引号。#{} 传参在进行SQL预编译时,会把参数部分用一个占位符 ? 代替,这样可以防止 SQL注入);
- ${} : 将参数取出不做任何处理(直接放入语句中,就是简单的字符串替换,并且该参数会参加SQL的预编译,需要手动过滤参数防止 SQL注入);
Java 数据库之Mybatis(二) Console app使用Mybatis集成Druid连接池
网友评论