刚接触java,对它的写法及数据交互模模糊糊,经过几天的研究终于知道了。我学习的项目框架是用的SSH和swing,界面用的easyUI。
数据交互:jsp页面 ------ action(pageModel) ------ service(model)------ dao ------ 数据库
页面调用action的方法,action调用service的方法,service调用dao封装的方法,dao的方法去操作数据库。
1.建数据库
我不知道别的框架调用action方法是什么样的,我这个调用是这样的:/personAction!addPerson.do
我练习用的是orcle,先说一下建数据库,我这个框架建modle对象,运行程序,会自动生成一个数据表。
person数据表.png我的model是TTestPerson,贴一个model的代码:
@Entity
@Table(name = "T_PERSON", schema = "")
public class TTestPerson implements java.io.Serializable{
private String id;
private String personId;
private String name;
private Integer age;
private String address;
private String job;
private String salary;
private String company;
private Date addTime;
@Id
@Column(name = "id", length = 10,unique = true,nullable = false)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Column(name = "personId", length = 10,unique = true,nullable = false)
public String getPersonId() {
return personId;
}
public void setPersonId(String personId) {
this.personId = personId;
}
@Column(name = "name", length = 20)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "age", length = 10)
pub;lic Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Column(name = "address", length = 10)
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Column(name = "job", length = 10)
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
@Column(name = "salary", length = 10)
public String getSalary() {
return salary;
}
public void setSalary(String salary) {
this.salary = salary;
}
@Column(name = "company", length = 10)
public String getCompany() {
return company;
}
public void setCompany(String company) {
= company;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "addTime")
public Date getAddTime() {
return addTime;
}
public void setAddTime(Date addTime) {
this.addTime = addTime;
}
}
@Entity @Table(name = "T_PERSON", schema = "")是注解,其中name是表名。写好表字段及字段属性运行程序,就会发现数据库中新创建了一个T_PERSON表。
2.进行数据库增删改查操作
(1)建立所需的model
跟数据库进行操作的是model,也就是上面创建的TTestPerson。跟页面进行交互的是pageModel,所以还需创建一个TestPerson,只需写表字段和set()、 get()方法。其实model和pageModel也可以不用分开的,用一个model即跟页面进行交互,也跟数据库进行交互也是可以的。对TTestPerson进行复制粘贴就好了。
代码如下:
public class TestPerson implements java.io.Serializable{
private String id;
private String personId;
private String name;
private Integer age;
private String address;
private String job;
private String salary;
private String company;
private Date addTime;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPersonId() {
return personId;
}
public void setPersonId(String personId) {
this.personId = personId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getSalary() {
return salary;
}
public void setSalary(String salary) {
this.salary = salary;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
= company;
}
public Date getAddTime() {
return addTime;
}
public void setAddTime(Date addTime) {
this.addTime = addTime;
}
}
(2)写接口类并对其进行实现(即servise层)
接口类:在接口类里声明需要与数据库进行操作的方法,这里只介绍增删改查方法、我的接口类是TestPersonService。代码如下:
public interface TestPersonService {
/** * 添加数据 */
public void add(TestPerson tp) throws ValidateFieldsException;
/** * 编辑数据 */
public void edit(TestPerson tp) throws ValidateFieldsException;
/** * 删除数据 */
public void delete(String pid);
/** * 查询数据(得到某个对象) */
public TestPerson get(String pid);
/** * 查询集合 */
public ListgetAllPersonlist();
/** * 查询集合(带分页) */
public ListfindListPage(String pId);
}
接口实现类:声明的接口是一定要进行实现的。我的实现类是TestPersonServiceImpl。代码更能说话,同样看代码:
@Service("testService")//testService是action中创建的servise的名字
//注意:一定要实现自己的接口类(TestPersonService),否则找不到实现类
public class TestPersonServiceImpl extends BaseServiceImpl implements TestPersonService {
@Autowired
private BaseDaoI<TTestPerson> dao;;
/** * 添加数据 */
public void add(TestPerson tp) throws ValidateFieldsException {
TTestPerson tTestPerson = new TTestPerson();
BeanUtils.copyProperties(tp, tTestPerson);
tTestPerson.setId(GetNewId(tp));
tTestPerson.setPersonId("1");
dao.save(tTestPerson);
}
public String GetNewId(TestPerson tp) {
return dao.GetAutoIncreBm("T_PERSON", "id", 10);
}
/** * 编辑数据 */
public void edit(TestPerson tp) throws ValidateFieldsException{
TTestPerson tTestPerson = dao.get(TTestPerson.class,tp.getId()); BeanUtils.copyProperties(tp,tTestPerson);
}
/** * 删除数据 */
public void delete(String pid){
TestPerson testPerson = new TestPerson();
String hql = String.format("from TTestPerson t where t.id=?",pid);
TTestPerson tTestPerson = dao.get(hql, new Object[] { pid });
if (tTestPerson != null)
{
dao.delete(tTestPerson);
}
}
/** * 查询某个对象 */
public TestPerson get(String pid){
TestPerson testPerson = new TestPerson();
String hql = "from TTestPerson t where t.id=?";
TTestPerson tTestPerson = dao.get(hql, new Object[] { pid });
if (tTestPerson != null){
BeanUtils.copyProperties(tTestPerson,testPerson);
}
return testPerson;
}
/** * 查询集合 */
public ListgetAllPersonlist() {
String hql = "from TTestPerson t";
Listlist = dao.find(hql);
ListnewList = new ArrayList();
for (TTestPerson t : list) {
TestPerson testPerson = new TestPerson();
BeanUtils.copyProperties(t, testPerson);
newList.add(testPerson);
}
return newList;
}
servise中声明并实现了增删查改的方法,action中需要的时候直接调用就可以了。
下面来说说action。
3.action与servise的数据交互
直接看代码好了,这样更容易理解,哈哈哈
//添加数据
public void addPerson(){
tp.setAddTime( getCurrentTime());
Json j = new Json();
try {
testService.add(tp);
j.setSuccess(true);
j.setMsg("添加成功!");
} catch (ValidateFieldsException e) {
j.setMsg("添加失败");
}
writeJson(j);
}
//根据ID删除数据
public void deletePerson(String id){
Json json = new Json();
try {
testService.delete("0000000021");
json.setSuccess(true);
json.setMsg("删除成功!");
}catch (Exception e)
{
logger.error(ExceptionUtil.getExceptionMessage(e));
json.setMsg("删除失败!");
}
super.writeJson(json);
}
//根据ID编辑数据
public void updatePerson(){
TestPerson testPersoned = testService.get("0000000007");
testPersoned.setName(request.getParameter("name"));
testPersoned.setAge(Integer.parseInt(request.getParameter("age")));
testPersoned.setCompany(request.getParameter("company"));
testPersoned.setSalary(request.getParameter("salary"));
testPersoned.setAddress(request.getParameter("address"));
testPersoned.setJob(request.getParameter("job"));
Json json = new Json();
try {
testService.edit(testPersoned);
json.setSuccess(true);
json.setMsg("编辑成功!");
}catch (Exception e)
{
logger.error(ExceptionUtil.getExceptionMessage(e));
json.setMsg("编辑失败!");
}
super.writeJson(json);
}
//根据ID查询数据
public void findOneData(){
Json j = new Json();
try {
TestPerson testPerson = testService.get("0000000001");
super.writeJson(testPerson);
j.setSuccess(true);
} catch (Exception e) {
logger.error(ExceptionUtil.getExceptionMessage(e));
j.setMsg("获取失败!");
}
}
//查询所有数据
public void findListData(){
List<TestPerson> list = testService.getAllPersonlist();
super.writeJson(list);
}
//获取当前时间
public Date getCurrentTime()
{
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
Date currentDate = new Date();
try
{
// new Date()为获取当前系统时间
currentDate = df.parse(df.format(new Date()));
}
catch (ParseException e)
{
e.printStackTrace();
}
return currentDate;
}
更新数据方法中有这种代码:
testPersoned.setName(request.getParameter("name"));
这是根据html中input输入框的name来获取输入框的值。
好了,今天就到这里吧,困死宝宝了,晚上做个好梦...