美文网首页
BaseDao基类使用说明

BaseDao基类使用说明

作者: 勤的空间 | 来源:发表于2021-11-22 15:32 被阅读0次

BaseDao主要用于数据库的操作,引用最新basedao依赖

  <dependency>
       <groupId>com.zdetech.basedao</groupId>
       <artifactId>basedao</artifactId>
       <version>3.4.1</version>
       <classifier>small</classifier>
  </dependency>

使用IDEA开发工具操作如下:
一、生成实体类对象,一个实体类对象对应一张表。
1、添加数据源,根据你的需要选择你使用的数据库,如MySQL或Oracle。

datasource.jpg
2、添加引入实体类,一个实体类对应一张表。
选择Persistence -> Generate Persistence Mapping -> By Database Schema
entity.jpg
entity2.jpg
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.propertiesapplication-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

postman.png
地址根据实际地址填写:http://localhost:8086/dztjj/setData.do
勾选Bodyx-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,勾选Bodyx-www-form-urlencoded

getData.png
参数:
sqlId : sys_sqlds表记录中的查询唯一id
json: 查询参数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。

相关文章

网友评论

      本文标题:BaseDao基类使用说明

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