BaseDao主要用于数据库的操作,引用最新basedao依赖
<dependency>
<groupId>com.zdetech.basedao</groupId>
<artifactId>basedao</artifactId>
<version>3.4.1</version>
<classifier>small</classifier>
</dependency>
使用IDEA开发工具操作如下:
一、生成实体类对象,一个实体类对象对应一张表。
1、添加数据源,根据你的需要选择你使用的数据库,如MySQL或Oracle。

2、添加引入实体类,一个实体类对应一张表。
选择Persistence -> Generate Persistence Mapping -> By Database Schema


3、修改实体类,加入自增主键@Id的注解,以MySQL与Oracle为例
如生成的实体类如UserPassword.java,修改此类:
MySQL自增长注解代码:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
public Integer getId() {
return id;
}
Oracle自增长注解代码(需要手动在表中添加Sequence自增长序列)
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USER_SEQ")、
@SequenceGenerator(sequenceName = "USER_SEQ", name = "USER_SEQ", allocationSize = 1, initialValue = 1)
public Long getId() {
return id;
}
二、修改配置文件
1、application.properties
: 根据数据源不同修改,指定mysql数据源,如是oracle修改为oracle,spring.profiles.active=mysql
2、修改application-mysql.properties
或application-oracle.properties
配置数据库连接字符串。
三、写setData.do的业务类代码
1、新建一下Service接口,如用户管理业务接口UserService.java,方法名自定义,如addUser添加用户,参数固定,参考下列代码:
public interface UsersService {
//添加用户
BaseResult addUser(JSONArray jsonArray, String operator, String pk, LinkedList<EntityWrapper> entityList);
}
2、新建一个Service类,实现刚刚建立的接口,参考下列代码:
@Transactional
@Service("userService")
public class UsersServiceImpl implements UsersService {
@Autowired
private BaseDAO baseDAO;
/**
* 添加或修改(传主键就是修改,不传主键就是添加)
*
* @param jsonArray
* @param operator
* @param pk
* @param entityList
* @return
*/
@Override
public BaseResult addUser(JSONArray jsonArray, String operator, String pk, LinkedList<EntityWrapper> entityList) {
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject obj = jsonArray.getJSONObject(i);
UserPassword u = new UserPassword();
u.setUsername(obj.getString("username"));
u.setPassword(obj.getString("password"));
u.setUserid(obj.getString("userid"));
u.setKzzf1("123456");
if (obj.getInteger("id") != null) {
u.setId(obj.getInteger("id"));
}
entityList.add(new EntityWrapper(u, false));
}
return new BaseResult(true, "SUCCESS", "添加成功");
}
}
上面代码就完成了用户添加对UserPassword表的新增或修改。
四、调用setData.do测试业务类
1、运行MainApplication.java类,启动服务 ,用postman工具测试setData.do

地址根据实际地址填写:
http://localhost:8086/dztjj/setData.do
勾选
Body
下x-www-form-urlencoded
,参数json传入json数组字符串[{username:'leonine',password:'123456',kzzf1:'137528533333',userid:1}]
,如有多条记录同时添加、修改、删除,可传入多条如[{username:'leonine',password:'123456',kzzf1:'137528533333',userid:1},{username:'leonine',password:'123456',kzzf1:'137528533333',userid:2}]
示例参数如下:
{
service: 'userService', //你建立的UserServcie类名
func: 'addUser', //方法名
operator:1, //操作员,可传入操作用户id
pk: '', //可为空
json: `[{username:'leonine',password:'123456',kzzf1:'137528533333',userid:1}]` //传入数组对象的json字符串
}
五、业务类编写说明
可查看演示代码UsersServiceImpl.java,其中实现了对表UserPassword的添加或修改、删除、批量修改、批量删除。
业务类方法统一参数为:JSONArray jsonArray, String operator, String pk, LinkedList<EntityWrapper> entityList
jsonArray
: 前端请求的数组参数,可循环取值
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject obj = jsonArray.getJSONObject(i);
String username = obj.getString("username");
//此后,可循环作实体对象增删改处理
}
operator
: 操作员
pk
: setData.do暂未用
entityList
: 实体操作List列表,所有插入、删除、修改数据操作,add到这个List里面。
1、插入:
建立一个实体类对象,分别set字段值,可为空的字段不用set,注意不要传入主键,主键为空时表示新增。
UserPassword u = new UserPassword();
u.setUsername(obj.getString("username"));
u.setPassword(obj.getString("password"));
entityList.add(new EntityWrapper(u, false));
2、修改
建立一个实体类对象,分别set字段值,不需要修改的字段不用set,注意要传入主键,主键不为空时表示修改主键对应的记录。
UserPassword u = new UserPassword();
u.setUsername(obj.getString("username"));
u.setPassword(obj.getString("password"));
//修改时一定要传入主键,否则表示新增
u.setId(obj.getInteger("id"));
entityList.add(new EntityWrapper(u, false));
3、根据主键删除:
建立一个实体类对象,set主键值,entityList.add时,EntityWrapper的delete传true。
UserPassword u = new UserPassword();
u.setId(obj.getInteger("id"));
//EntityWrapper第二个参数传true
entityList.add(new EntityWrapper(u, true));
4、根据非主键批量删除:
建立一个实体类对象,set删除的条件字段,比如,如果u.setUsername("leonine")
表示要删除所有username='leonine'的用户,如果是多个字段条件,可set多个字段,如
u.setUsername("leonine");u.setPassword("123456");
,表示要删除所有username='leonine' and password='123456'
的用户。entityList.add时,EntityWrapper的deleteByFields传true。
UserPassword u = new UserPassword();
u.setUsername(obj.getString("username"));
//EntityWrapper第三个参数传true
entityList.add(new EntityWrapper(u, true, true));
5、根据非主键批量修改:
建立两个实体类,一个实体类是修改值对象,一个实体类表示修改的条件,如
UserPassword u = new UserPassword();
u.setUsername('leonine-update');
UserPassword where = new UserPassword();
where.setUsername("leonine");
表示
update user_password set username='leonine-update' where username='leonine'
。
修改值对象与条件对象都可set多个字段,表示修改多个字段或多个where条件字段。示例代码如下:
UserPassword u = new UserPassword();
u.setUsername(obj.getString("newUsername"));
UserPassword where = new UserPassword();
where.setUsername(obj.getString("username"));
entityList.add(new EntityWrapper(u, where));
六、查询getData.do编写
1、在sys_sqlds表中插入记录,数据如下:
sql_id: 查询唯一id
sql_ds: 查询语句说明
sql_server: 查询语句
查询语句编写与原生写法类似,其中参数用 :<参数名>代替,如
select * from user_password where username = :username and password = :password
2、前端用postman测试sql
使用post方式,地址根据实际地址填写:http://localhost:8086/dztjj/getData.do
,勾选Body
下x-www-form-urlencoded

参数:
sqlId
: sys_sqlds表记录中的查询唯一idjson
: 查询参数json字符串{username:'leonine',password:'123456'}
七、在service类方法中写查询或保存数据
1、查询:
baseDAO.findById
: 根据主键查询实体类
baseDAO.findByFields
: 根据非主键字段查询实体类
baseDAO.getData
: 根据sys_sqlds表中的sql语句查询
2、保存:
3.3.4以后版本已取消保存方法,此版本在entityList.add方法时已保存数据,不再需要调用保存方法。
如非必要,请不要直接调用baseDAO的保存方法,请使用前面介绍的entityList.add方法插入、删除、修改。
1、baseDAO.save : 保存实体类。
此方法通常是用于插入操作时,后继操作需要获取自增长的id。因为entityList.add方法,是在return之后按add的顺序执行的,在业务类方法没return前,并没有执行数据插入操作,所以在业务类方法中不可能获取保存后自增长的id,这时就需要调用一下baseDAO.save方法,以获取自增长id。
网友评论