美文网首页
Java 数据库之Mybatis(一) Console app使

Java 数据库之Mybatis(一) Console app使

作者: googoler | 来源:发表于2020-08-27 14:16 被阅读0次

Java console app 即控制台程序。在console app中使用Mybatis可以更简单、直接的理解Mybatis。工程目录结构入下:

目录结构

所有包路径在这里查看:

image.png

分布构建:

  1. 建立console app工程:
    使用idea 社区版或其他 IDE 创建Maven支持java console app的工程;
    1. image.png
    2. image.png
    3. image.png
  2. 添加依赖项(dependencies):
    1. 这里使用 h2 嵌入式数据库
    2. <?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>
      
  3. 添加实体类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;
    }
}

  1. 新建 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>
       ```
    
    
    
  2. 添加 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>
    
  3. 添加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);
    }
    
  4. 添加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

注意事项:

  1. Maven h2 依赖文件中默认是 test scope,此处默认是测试有效,console 项目中需要删除;


    image.png
  2. mapper文件中注意分清 #、 $ 占位符的区别:
    • 参考:Mybatis 数据库框架 mapper文件中 # 与 $ 符号的区别
    • #{} : 根据参数的类型进行合适的处理(比如传入String类型,会为参数加上双引号,如果传入Integer类型数据,则不会为参数加上双引号。#{} 传参在进行SQL预编译时,会把参数部分用一个占位符 ? 代替,这样可以防止 SQL注入);
    • ${} : 将参数取出不做任何处理(直接放入语句中,就是简单的字符串替换,并且该参数会参加SQL的预编译,需要手动过滤参数防止 SQL注入);

Java 数据库之Mybatis(二) Console app使用Mybatis集成Druid连接池


{ \color{red} { ---如果对你有帮助 请支持 谢谢--- } }

相关文章

网友评论

      本文标题:Java 数据库之Mybatis(一) Console app使

      本文链接:https://www.haomeiwen.com/subject/ijfcsktx.html