一、MyBatis和Hibernate区别

  MyBatis以sql语句得到对象

  Hibernate以对象得到sql语句

二、使用MyBatis

1、添加依赖

  

 

 

 2、添加mybatis配置文件

  <?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="development">
      <environment id="development">
       <transactionManager type="JDBC" />
       <dataSource type="POOLED">
         <property name="driver" value="com.mysql.jdbc.Driver" />
         <property name="url"  value="jdbc:mysql://ip:3306/test" />
         <property name="username" value="username" />
         <property name="password" value="password" />
       </dataSource>
      </environment>
    </environments>

    <mappers>
      <mapper resource="mybatis/UserMapper.xml"/>
    </mappers>

  </configuration>

3、创建映射实体类,mapper接口

4、添加mapper映射文件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="mybatis_test.mapper.UserMapper">   <!-- 对应mapper接口 -->
    <select id="getUser" parameterType="int" resultType="mybatis_test.entity.User">   <!-- 对应mapper接口中方法 -->
      SELECT *
      FROM users where id =#{id}
    </select>
  </mapper>

5、测试

  public class MyBatisTest {
    public static void main(String[] args) throws IOException {
      String resource = "mybatis.xml";
      //读取配置文件
      Reader reader = Resources.getResourceAsReader(resource);
      //获取会话工厂
      SqlSessionFactory build = new SqlSessionFactoryBuilder().build(reader);
      SqlSession openSession = build.openSession();

      //查询语句
      String sql = "mybatis_test.mapper.UserMapper.getUser";
      //调用API查询
      User user = openSession.selectOne(sql, 2);
      System.out.println(user);
      openSession.close();
    }
  }

三、sql注入问题

1、解决方法:预编译

2、#和$的区别:

  #可以防止sql注入

  $使用sql拼接方式

四、自动生成

  使用Generator自动生成Dao接口,mapper映射文件,Entity类

 

mybatis-plus

1、依赖

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>

2、入门

定义mapper:

public interface UserMapper extends BaseMapper<User>

定义service:

public interface UserService extends IService<User> 
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService

解释:BaseMapper,IService, ServiceImpl中定义了常用的接口

3、自定义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="com.example.mybatisplusdemo1.mapper.UserMapper">

<sql id="Base_Column_List">
id, name, age, email
</sql>

<select id="selectAllByName" resultType="com.example.mybatisplusdemo1.entity.User">
select <include refid="Base_Column_List" />
from user
where name = #{name}
</select>

</mapper>

默认配置文件路径:

resources/mapper

自定义配置文件路径:

mybatis-plus.mapper-locations=classpath:mapper/*.xml

 4、常用注解

@TableName

@TableId

  指定主键

@TableField

  自动填充:

@Data
public class User {

    private Long id;
    private String name;
    private String email;
    private Integer age;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}

  实现接口:

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }
}

5、分页插件:详见官网文档

@Configuration
@MapperScan("com.example.mybatisplusdemo1.mapper")
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

 

posted on 2019-08-31 15:55  dysdhd  阅读(134)  评论(0编辑  收藏  举报