夜微凉、的博客

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  76 随笔 :: 24 文章 :: 22 评论 :: 24万 阅读

一、使用注解

这里是通过全注解的方式来写SQL,不写XML文件,@Select @Insert @Update以及@Delete  四个注解分别对应XML中的 select insert   update 以及 delete 标签,

@Results注解类似于XML中的ResultMap映射文件(getUserById方法给查询结果的字段取别名主要是向小伙伴们演示下@Results注解的用法),

另外使用@SelectKey注解可以实现主键回填的功能,即当数据插入成功后,插入成功的数据id会赋值到user对象的id属性上。

此处演示用的是SQL Server数据库。实际开发中导入的Maven依赖按照自己的数据库。

1、添加 pom.xml  文件。

复制代码
<!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>mssql-jdbc</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.20</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>
View Code
复制代码

2、在application.properties中配置数据库的基本信息(配置数据源细节参考上篇文章)。

复制代码
server.port=8001

#mybatis相关配置
mybatis.type-aliases-package=com.springboot.com.model
#mybatis.config-location=classpath\:mapper/*.xml
#Druid 相关配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Sync_temp3
spring.datasource.username=sa
spring.datasource.password=123
#连接池初始化大小
spring.datasource.druid.initial-size=10
#连接池最大连接数
spring.datasource.druid.max-active=100
#最小连接数
spring.datasource.druid.min-idle=10
#请求获取连接的超时时间  毫秒
spring.datasource.druid.max-wait=60000
#打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=20
#配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=30000
spring.datasource.druid.validation-query=SELECT 1
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
#配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.druid.filters=stat,log4j

# WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
#是否启用StatFilter默认值true
spring.datasource.druid.web-stat-filter.enabled=true
##spring.datasource.druid.web-stat-filter.url-pattern=
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
# StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
#是否启用StatViewServlet默认值true
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.reset-enable=false
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=123456

# LOG4J配置
log4j.rootCategory=INFO,stdout
# 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
View Code
复制代码

3、编写相关的 Service 、Dao、Model  文件。

实体类:

复制代码
public class CompanyModel {
    public String companyCode;
    public String companyName;
    public String Address;

    public String getCompanyCode() {
        return companyCode;
    }

    public void setCompanyCode(String companyCode) {
        this.companyCode = companyCode;
    }

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public String getAddress() {
        return Address;
    }

    public void setAddress(String address) {
        Address = address;
    }
}
View Code
复制代码

Service: 

复制代码
public interface IUserService {
    /*
        查询数据列表
    */
    List<CompanyModel> getList();
    /*
        查询数据列表
    */
    List<CompanyModel> getList(UserModel searchModel);

    /*
        删除用户
    */
    int DeleteUser(int i);

    /*
        异常测试
    */
    int UpdateUser(UserModel model);
}


@Service
public class UserServiceImp implements IUserService {
    @Autowired
    private CompanyMapper companyMapper;


    /*
        查询数据列表
    */
    public List<CompanyModel> getList() {
        List<CompanyModel> list = null;
        try {
            list = companyMapper.selectUserList();
        } catch (Exception ex) {
            throw ex;
        }
        return list;
    }

    /*
        查询数据列表
    */
    public List<CompanyModel> getList(UserModel searchModel) {
        List<CompanyModel> list = null;
        int result = 0;
        try {
            list = companyMapper.selectUserListByName("dhgk");
        } catch (Exception ex) {
            throw ex;
        }
        return list;
    }

    /*
        删除用户
    */
    @LogAnnotion(executeName = "用户删除")
    public int DeleteUser(int i) {
        int result = companyMapper.DeleteUser(561);
        return result;
    }

    /*
        更新用户
    */
    public int UpdateUser(UserModel model) {
        int result;
        result = companyMapper.UpdateUser(model);
        return result;
    }


}
View Code
复制代码

Mapper: 

复制代码
//@Mapper
public interface CompanyMapper {
    /*
        查询列表
    */
    @Select("SELECT TOP 1000 UserName AS companyCode,UnitName AS companyName,Address AS Address " +
            "FROM User_Enterprise")
    List<CompanyModel> selectUserList();
    /*
        根据条件查询
    */
    @Select("SELECT UserName AS companyCode,UnitName AS companyName,Address AS Address " +
            "FROM User_Enterprise" +
            " WHERE UserName !='${companyName}'")
    List<CompanyModel> selectUserListByName(String companyName);
    /*
        删除数据
    */
    @Delete("DELETE User_Enterprise WHERE ID=#{id}")
    Integer DeleteUser(Integer id);
    /*
        更新数据
    */
    @Update("UPDATE User_Enterprise SET IsDelete=1,UserName=#{userName} WHERE ID=#{id}")
    Integer UpdateUser(UserModel model);
}
View Code
复制代码

注意:此处把 Mapper 交给 Spring 进行管理有两种方式可以在 Mapper 文件上加上 @Mapper 注解或者在启动类上添加 @MapperScan()  注解

此处我选择的是 @MapperScan()  注解。

复制代码
@SpringBootApplication
@MapperScan(basePackages ={"com.springboot.com.mapper"})
public class SpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }

}
View Code
复制代码

我的项目路径:

 二、使用 ***Mapper.xml 配置文件方式

 1、在启动类上添加 @MapperScan()  注解。

 2、在 application.properties 配置  **Mapper.xml 配置文件的位置。

复制代码
#mybatis相关配置
mybatis.mapper-locations=classpath:mapper/*.xml
#打印SQL--参数和查询结果 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 mybatis.configuration.log-impl= org.apache.ibatis.logging.stdout.StdOutImpl #定义LOG输出级别 log4j.rootLogger=error, Console # 控制台输出 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
复制代码

org.apache.ibatis.logging.stdout.StdOutImpl: 这个是可以打印sql、参数、查询结果的

org.apache.ibatis.logging.log4j.Log4jImpl     :   这个不打印查询结果三、打印SQL

3、Service层

复制代码
public interface IUserService {
    /*
        查询数据列表
    */
    List<CompanyModel> getList();
    /*
        查询数据列表
    */
    List<CompanyModel> getList(UserModel searchModel);

    /*
        删除用户
    */
    Integer DeleteUser(int i);

    /*
        异常测试
    */
    int UpdateUser(UserModel model);
}


@Service
public class UserServiceImp implements IUserService {
    @Autowired
    private CompanyMapper companyMapper;


    /*
        查询数据列表
    */
    public List<CompanyModel> getList() {
        List<CompanyModel> list = null;
        try {
            list = companyMapper.selectUserList();
        } catch (Exception ex) {
            throw ex;
        }
        return list;
    }

    /*
        查询数据列表
    */
    public List<CompanyModel> getList(UserModel searchModel) {
        List<CompanyModel> list = null;
        int result = 0;
        try {
            list = companyMapper.selectUserListByName("dhgk");
        } catch (Exception ex) {
            throw ex;
        }
        return list;
    }

    /*
        删除用户
    */
//    @LogAnnotion(executeName = "用户删除")
    public Integer DeleteUser(int i) {
        int result = companyMapper.DeleteUser(576);
        return result;
    }

    /*
        更新用户
    */
    public int UpdateUser(UserModel model) {
        int result;
        result = companyMapper.UpdateUser(model);
        return result;
    }


}
View Code
复制代码

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="com.springboot.com.mapper.CompanyMapper">
    <!--查询所有数据-->
    <select id="selectUserList" resultType="com.springboot.com.model.CompanyModel">
      SELECT TOP 1000 UserName AS companyCode,UnitName AS companyName,Address AS Address
      FROM User_Enterprise
    </select>

    <!--根据查询条件-查询所有数据-->
    <select id="selectUserListByName" resultType="com.springboot.com.model.CompanyModel" parameterType="java.lang.String">
      SELECT TOP 1000 UserName AS companyCode,UnitName AS companyName,Address AS Address
      FROM User_Enterprise
        WHERE UserName !='${companyName}'
    </select>

    <!--删除数据-->
    <delete id="DeleteUser" parameterType="java.lang.Integer">
      DELETE User_Enterprise WHERE ID=#{id}
    </delete>

    <!--修改数据-->
    <update id="UpdateUser" parameterType="com.springboot.com.model.CompanyModel">
      UPDATE User_Enterprise SET IsDelete=1,UserName=#{userName} WHERE ID=#{id}
    </update>

</mapper>
复制代码

三、使用 PageHelper 分页查询

 1、添加 Maven 依赖

<dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper-spring-boot-starter</artifactId>
      <version>1.2.10</version>
</dependency>

2、添加分页配置

复制代码
#PageHelper相关配置
pagehelper.helper-dialect=sqlserver
#分页合理化参数,
# 默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页,
# pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。
pagehelper.reasonable=true
#支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。
pagehelper.support-methods-arguments=true
#为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值,
# 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,
# 不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
pagehelper.params=count=countSql
#如果 pageSize=0 就会查询出全部的结果(相当于没有执行分页查询)
pagehelper.page-size-zero=true
复制代码

3、代码调用 : 

复制代码
/*
        查询数据列表
    */
    public PageInfo<CompanyModel> getList() {
        PageInfo<CompanyModel> pageInfo;
        try {
            PageHelper.startPage(1,10);
            List<CompanyModel> list = companyMapper.selectUserList();
            pageInfo=new PageInfo<CompanyModel>(list);
        } catch (Exception ex) {
            throw ex;
        }
        return pageInfo;
    }
复制代码

 

posted on   夜、微凉  阅读(146)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示