Lisy's blog Lisy's blog
首页
后端
前端
读书
关于

新晴

做事情积极主动。积极主动不仅指行事的态度,还意味着为人一定要对自己的人生负责。个人行为取决于自身的抉择,而不是外在的环境,人类应该有营造有利的外在环境的积极性和责任感。
首页
后端
前端
读书
关于
  • Java

    • Java总览
    • 日常总结

      • hutool常用日期功能
      • 基于hutool请求工具使用代理
      • Apache JDBC工具(commons-dbutils)
      • jdbcTemplate(NamedParameterJdbcTemplate )使用
        • 一、引入依赖
        • 二、示例代码
        • 三、常见驱动名称
        • 四、参考:
      • spring boot RestTemplate get设置header
      • git常用命令
      • 使用阿里seata处理分布式事务(nacos作为注册中心)
      • java诊断工具Arthas使用
      • 利用jsoup获取网页内容,然后对内容进行分析
      • mysql允许远程访问
      • java部署速查
    • 效率工具

  • linux

  • python

  • 其他

  • python

  • 后端
  • Java
  • 日常总结
lisy
2023-09-05
目录

jdbcTemplate(NamedParameterJdbcTemplate )使用

# 一、引入依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.23</version>
        </dependency>
1
2
3
4
5
6
7
8
9

# 二、示例代码

 DataSource dataSource = new SimpleDriverDataSource(
                BeanUtils.instantiateClass(org.postgresql.Driver.class),
                "jdbc:postgresql://127.0.0.1:5432/postgres?charSet=UTF-8&&allowEncodingChanges=true&serverTimezone=Asia/Shanghai",
                "postgres",
                "123321");
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        Map<String,Object> rs = jdbcTemplate.queryForMap("select * from a001 where pkid='03ef5d004aa8441f976889a5b08c7e51'");
        return rs;










@SpringBootTest
class JdbcTests {
    @Resource
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
    @Test
    void getBean() {
        //查询对象
        String sql = "select * from ns_admin where id=:id";
        Map<String,Object> param = new HashMap<>();
        param.put("id",1);
        RowMapper<Admin> rowMapper=new BeanPropertyRowMapper<>(Admin.class);
        Admin user= namedParameterJdbcTemplate.queryForObject(sql,param,rowMapper);
        System.out.println(user.getNickname());
        // 查询列表
        String sql2 = "select * from ns_admin where id>:id";
        Map<String,Object> param2 = new HashMap<>();
        param2.put("id",0);
        List<Admin> list = namedParameterJdbcTemplate.query(sql2,param2,rowMapper);
        for(Admin admin:list){
            System.out.println(admin.getNickname());
        }
        //count、avg、sum
        String sql3 ="select count(*) from ns_admin";
        int count= namedParameterJdbcTemplate.queryForObject(sql3,new MapSqlParameterSource(),Integer.class);
        int sum= namedParameterJdbcTemplate.queryForObject("select sum(id) from ns_admin",new MapSqlParameterSource(),Integer.class);
        int avg= namedParameterJdbcTemplate.queryForObject("select avg(id) from ns_admin",new MapSqlParameterSource(),Integer.class);
        System.out.println(count);
        System.out.println(sum);
        System.out.println(avg);
        //like
        String sql4 ="select * from ns_admin where nickname like :nickname";
        Map<String,Object> param4 = new HashMap<>();
        //拼在变量上面
        param4.put("nickname","李%");
//        param4.put("nickname","%李%");
//        param4.put("nickname","%李");
        List<Admin> list4 = namedParameterJdbcTemplate.query(sql4,param4,rowMapper);
        for(Admin admin:list4){
            System.out.println(admin.getNickname());
        }
        //like
        String sql5 ="select * from ns_admin where id in (:ids)";
        Map<String,Object> param5 = new HashMap<>();
        //拼在变量上面
        param5.put("ids", Arrays.asList("1","2"));
        List<Admin> list5 = namedParameterJdbcTemplate.query(sql5,param5,rowMapper);
        for(Admin admin:list5){
            System.out.println(admin.getNickname());
        }
        //执行sql
        String rs = namedParameterJdbcTemplate.execute("CREATE TABLE sui_persons ( PersonID int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255) )", preparedStatement -> {
            preparedStatement.execute();
            return "success";
        });
    }
    private static class Admin {
        private Long id;
        private String username;
        private String nickname;
        private String password;
        private Integer logintime;

        public Long getId() {
            return id;
        }

        public void setId(Long id) {
            this.id = id;
        }

        public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        public String getNickname() {
            return nickname;
        }

        public void setNickname(String nickname) {
            this.nickname = nickname;
        }

        public String getPassword() {
            return password;
        }

        public void setPassword(String password) {
            this.password = password;
        }

        public Integer getLogintime() {
            return logintime;
        }

        public void setLogintime(Integer logintime) {
            this.logintime = logintime;
        }
    }
}






@Component
public class SimpleJdbcUtils {
    @Resource
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    /**
     * map形式插入数据;如果map中的key和数据库不对应,会抛出异常
     * @param tableName 表名
     * @param map       参数,key(数据库字段)-value(字段对应数据)
     * @return          影响数据行数
     */
    public int insertFun(String tableName,Map<String,Object> map){
        return this.insertFun(tableName,map,true);
    }
    /**
     * map形式插入数据;如果map中的key和数据库不对应,会抛出异常
     * @param tableName  表名
     * @param map        参数,key(数据库字段)-value(字段对应数据)
     * @param ignoreNull 是否忽略null(如果是值是null,直接忽略key-value)
     * @return           影响数据行数
     */
    public int insertFun(String tableName,Map<String,Object> map,boolean ignoreNull){
        if(map==null||map.isEmpty()){
            throw new BusinessException("数据为空");
        }
        //如果设置了忽略null,过滤掉null
        if(ignoreNull){
            Set<Map.Entry<String,Object>> realData = map.entrySet();
            // 过滤null
            map = realData.stream()
                    .filter(ObjEntry -> ObjEntry.getValue()!=null)
                    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
            //判断过滤后的值是不是空
            if(map.isEmpty()){
                throw new BusinessException("数据为空");
            }
        }
        //拼接insert语句
        Set<String> keys = map.keySet();
        int sizeIndex = keys.size()-1;
        StringBuilder insertSql = new StringBuilder("INSERT INTO " + tableName + "(");
        int index = 0;
        for (String k:keys){
            if(index<sizeIndex){
                insertSql.append(k).append(",");
            }else{
                insertSql.append(k);
                insertSql.append(") VALUES (");
            }
            index=index+1;
        }
        index = 0;
        for (String k:keys){
            if(index<sizeIndex){
                insertSql.append(":").append(k).append(",");
            }else{
                insertSql.append(":").append(k).append(")");
            }
            index=index+1;
        }
        return namedParameterJdbcTemplate.update(insertSql.toString(), map);
    }

    /**
     * map形式更新数据;如果map和where中的key和数据库不对应,会抛出异常
     * where条件只支持key=value形式
     * @param tableName   表名
     * @param map         数据,key(数据库字段)-value(字段对应数据)
     * @param where       where条件数据,key(数据库字段)-value(字段对应数据)
     * @return            影响数据行数
     */
    public int updateFun(String tableName,Map<String,Object> map,Map<String,Object> where){
        if(map==null||map.isEmpty()){
            throw new BusinessException("数据为空");
        }
        //拼接update set语句
        Set<String> keys = map.keySet();
        int sizeIndex = keys.size()-1;
        StringBuilder updateSql = new StringBuilder("UPDATE " + tableName + " SET ");
        int index = 0;
        for (String k:keys){
            if(index<sizeIndex){
                updateSql.append(k).append("=:").append(k).append(",");
            }else{
                updateSql.append(k).append("=:").append(k);
            }
            index=index+1;
        }
        //最终参数
        Map<String,Object> params = new HashMap<>(map);
        //拼接where
        if(where!=null&&!where.isEmpty()){
            index = 0;
            Set<Map.Entry<String,Object>> whereSet = where.entrySet();
            int whereSizeIndex = whereSet.size()-1;
            updateSql.append(" where ");
            for (Map.Entry<String,Object> w:whereSet){
                String k = w.getKey();
                //把where条件也放到最终参数中
                params.put(k,w.getValue());
                //拼接where参数
                if(index<whereSizeIndex){
                    updateSql.append(k).append("=:").append(k).append(",");
                }else{
                    updateSql.append(k).append("=:").append(k);
                }
                index=index+1;
            }
        }
        return namedParameterJdbcTemplate.update(updateSql.toString(), params);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239

# 三、常见驱动名称

//oracle
driverClass:oracle.jdbc.driver.OracleDriver
jdbcUrl:jdbc:oracle:thin:@192.168.0.1:1521:yourDBName
//SQL Server
driverClass:com.microsoft.sqlserver.jdbc.SQLServerDriver(2005版本及以后)
             com.microsoft.jdbc.sqlserver.SQLServerDriver(2000版本)

jdbcUrl:jdbc:sqlserver://192.168.0.1:1433;databasename=yourDBName
//pgsql
driverClass:org.postgresql.Driver
jdbcUrl:jdbc:postgresql://127.0.0.1:5432/yourDBName
//MySQL
driverClass:com.mysql.jdbc.Driver
jdbcUrl:jdbc:mysql://192.168.0.1:3306/yourDBName
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 四、参考:

数据库连接driverClass和jdbcUrl大全 (opens new window)

初始化jdbcTemplate (opens new window)

上次更新: 2024/01/07, 07:44:52
Apache JDBC工具(commons-dbutils)
spring boot RestTemplate get设置header

← Apache JDBC工具(commons-dbutils) spring boot RestTemplate get设置header→

最近更新
01
Anaconda conda命令速查
01-05
02
奇特的一生
06-16
03
docker学习
02-16
更多文章>
Theme by Vdoing | Copyright © 2020-2025 lisy | 备案号:鲁ICP备18023702号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式