SSJ集成代码

1、导包

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring.version>4.3.7.RELEASE</spring.version>
        <hibernate.version>4.3.8.Final</hibernate.version>
        <jackson.version>2.8.7</jackson.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- ORM映射框架和事务管理 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- MySQL驱动包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.26</version>
        </dependency>

        <!-- DBCP连接池 -->
        <dependency>
            <groupId>commons-pool</groupId>
            <artifactId>commons-pool</artifactId>
            <version>1.5.6</version>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.2.2</version>
        </dependency>

        <!-- Hibernate核心包 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <!-- Hibernate对JPA的实现包 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <!-- jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson.version}</version>
        </dependency>

        <!-- AOP联盟 -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.1</version>
        </dependency>
    </dependencies>

2、配置Spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--扫描包-->
    <context:component-scan base-package="cn.yinsh.ssj.dao,cn.yinsh.ssj.service"/>

    <!--数据库连接池-->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!--集成JPA-->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <!--引用数据库连接池-->
        <property name="dataSource" ref="dataSource"/>
        <!--配置domain-->
        <property name="packagesToScan" value="cn.yinsh.ssj.domain"/>
        <!--JPA实现厂商-->
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <!--是否自动建表-->
                <property name="generateDdl" value="FALSE"/>
                <!--是否显示Sql-->
                <property name="showSql" value="TRUE"/>
                <!--方言-->
                <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect"/>
            </bean>
        </property>
    </bean>
    <!--事务管理-->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

3、domain实体类
employee:

@Entity
public class Employee {
    @Id
    @GeneratedValue
    private Long id;
    private String name;
    private Integer age;
    private String phone;
    private String email;
    private Integer gender;
    private BigDecimal salary;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "department_id")
    @JsonIgnoreProperties({"hibernateLazyInitializer","handler","fieldHandler"})
    private Department department;

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", phone='" + phone + '\'' +
                ", email='" + email + '\'' +
                ", gender=" + gender +
                ", salary=" + salary +
                '}';
    }

    public Long getId() {
        return id;
    }

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

    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 getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public BigDecimal getSalary() {
        return salary;
    }

    public void setSalary(BigDecimal salary) {
        this.salary = salary;
    }

    public Department getDepartment() {
        return department;
    }

    public void setDepartment(Department department) {
        this.department = department;
    }
}

department:

@Entity
public class Department {
    @Id
    @GeneratedValue
    private Long id;
    private String name;
    public Department() {}
    public Department(Long id,String name) {
        this.id=id;
        this.name = name;
    }
    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

4、dao层接口及实现类
IBaseDao

public interface IBaseDao<T> {
    void save(T t);
    void update(T t);
    void delete(Long id);
    T findOne(Long id);
    List<T> findAll();
    //分页查询
    List<T> findByPage(Integer pageNum,Integer pageSize);
    //查询总行数
    Long findRowCount();
}

IDepartmentDao&IEmployeeDao

public interface IDepartmentDao extends IBaseDao<Department>{
}
public interface IEmployeeDao extends IBaseDao<Employee>{
}

dao层实现类
Employee

@Repository
public class EmployeeDaoImpl implements IEmployeeDao {
    @PersistenceContext//在找不到entityManager时会通过entityManagerFactory创建一个entityManager对象
    private EntityManager entityManager;
    @Override
    public void save(Employee employee) {
        entityManager.persist(employee);
    }

    @Override
    public void update(Employee employee) {
        entityManager.merge(employee);
    }

    @Override
    public void delete(Long id) {
        Employee employee = entityManager.find(Employee.class, id);
        entityManager.remove(employee);
    }

    @Override
    public Employee findOne(Long id) {
        return entityManager.find(Employee.class, id);
    }

    @Override
    public List<Employee> findAll() {
        Query query = entityManager.createQuery("select e from Employee e");
        return query.getResultList();
    }

    @Override
    public List<Employee> findByPage(Integer pageNum, Integer pageSize) {
        Query employee = entityManager.createQuery("select e from Employee e order by e.id desc");
        employee = employee.setFirstResult((pageNum - 1) * pageSize).setMaxResults(pageSize);
        return employee.getResultList();
    }

    @Override
    public Long findRowCount() {
        Query query = entityManager.createQuery("select count(e) from Employee e");

        return  (Long) query.getSingleResult();
    }
}

Department

@Repository
public class DepartmentDaoImpl implements IDepartmentDao{
    @PersistenceContext//在找不到entityManager时会通过entityManagerFactory创建一个entityManager对象
    private EntityManager entityManager;
    @Override
    public void save(Department department) {
        entityManager.persist(department);
    }

    @Override
    public void update(Department department) {
        entityManager.merge(department);
    }

    @Override
    public void delete(Long id) {
        Employee employee = entityManager.find(Employee.class, id);
        entityManager.remove(employee);
    }

    @Override
    public Department findOne(Long id) {
        return entityManager.find(Department.class, id);
    }

    @Override
    public List<Department> findAll() {
        Query employee = entityManager.createQuery("select d from Department d");
        return employee.getResultList();
    }

    @Override
    public List<Department> findByPage(Integer pageNum, Integer pageSize) {
        Query query = entityManager.createQuery("select d from Department d order by d.id desc ");
        query = query.setFirstResult((pageNum - 1) * pageSize).setMaxResults(pageSize);
        return query.getResultList();
    }

    @Override
    public Long findRowCount() {
        Query query = entityManager.createQuery("select count(d) from Department d");
        return  (Long) query.getSingleResult();
    }
}

5、Service层接口及实现类
IBaseService

public interface IBaseService<T> {
    void save(T t);
    void update(T t);
    void delete(Long id);
    void delete(String ids);
    T findOne(Long id);
    List<T> findAll();
    Page<T> findByPage(Integer pageNum,Integer pageSize);
}

IBaseServiceImpl

@Transactional(readOnly = true)
public class BaseServiceImpl<T> implements IBaseService<T> {
    @Autowired
    private IBaseDao<T> baseDao;
    @Override
    @Transactional(readOnly = false)
    public void save(T t) {
        baseDao.save(t);
    }

    @Override
    @Transactional(readOnly = false)
    public void update(T t) {
        baseDao.update(t);
    }

    @Override
    @Transactional(readOnly = false)
    public void delete(Long id) {
        baseDao.delete(id);
    }

    @Override
    @Transactional(readOnly = false)
    public void delete(String ids) {
        if (ids!=null && !"".equals(ids)){
            for (String id :ids.split(",")){
                baseDao.delete(Long.valueOf(id));
            }
        }
    }

    @Override
    public T findOne(Long id) {
        return baseDao.findOne(id);
    }

    @Override
    public List<T> findAll() {
        return baseDao.findAll();
    }

    @Override
    public Page<T> findByPage(Integer pageNum, Integer pageSize) {
        List<T> list = baseDao.findByPage(pageNum, pageSize);
        Long total = baseDao.findRowCount();
        return new Page<T>(total,list,pageNum,pageSize);
    }
}

EmployeeService & impl

public interface IEmployeeService extends IBaseService<Employee>{
}
@Service
@Transactional(readOnly = true)
public class EmployeeServiceImpl extends BaseServiceImpl<Employee> implements IEmployeeService{
}

DepartmentService & impl

public interface IDepartmentService extends IBaseService<Department> {
}
@Service
@Transactional(readOnly = true)
public class DepartmentServiceImpl extends BaseServiceImpl<Department> implements IDepartmentService {
}

6、controller层暴露接口
EmployeeController

@Controller
@RequestMapping("/employee")
public class EmployeeController {
    @Autowired
    private IEmployeeService employeeService;

    @RequestMapping("/index")
    public String index() {
        return "employee";
    }

    @ResponseBody
    @RequestMapping("/page")
    public Page<Employee> page(Integer pageNum, Integer pageSize) {
        pageNum = pageNum == null ? 1 : pageNum;
        pageSize = pageSize == null ? 10 : pageSize;
        return employeeService.findByPage(pageNum, pageSize);
    }
    @ResponseBody
    @RequestMapping("/save")
    public Result save(Employee employee){
        try {
            if (employee.getId()==null){
                employeeService.save(employee);
                return new Result(200,"新增成功");
            }else {
                employeeService.update(employee);
                return new Result(200,"修改成功");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(500,"失败");
        }
    }
    @ResponseBody
    @RequestMapping("/delete")
    public Result delete(String ids){
        try {
            employeeService.delete(ids);
            return new Result(200,"删除成功");
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(500,"删除失败");
        }
    }
    @ResponseBody
    @RequestMapping("/findOne")
    public Employee findOne(Long id){
        return employeeService.findOne(id);
    }
}

DepartmentController

@Controller
@RequestMapping("/department")
public class DepartmentController {
    @Autowired
    private IDepartmentService departmentService;
    @ResponseBody
    @RequestMapping("/findAll")
    public List<Department> findAll(){
        List<Department> list = departmentService.findAll();
        list.add(0,new Department(-1L,"请选择部门"));
        return list;
    }
}

7、配置SpringMVC

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--扫描包-->
    <context:component-scan base-package="cn.yinsh.ssj.controller"/>
    <!--开启springmvc的注解驱动-->
    <mvc:annotation-driven/>
    <!--静态资源放行-->
    <mvc:default-servlet-handler/>
    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--文件上传解析器-->
</beans>

8、集成EasyUI,对员工增删改查

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
        <link rel="stylesheet" type="text/css" href="/easyui/themes/default/easyui.css" />
        <link rel="stylesheet" type="text/css" href="/easyui/themes/icon.css" />
        <script type="text/javascript" src="/easyui/jquery.min.js"></script>
        <script type="text/javascript" src="/easyui/jquery.jdirk.js"></script>
        <script type="text/javascript" src="/easyui/jquery.easyui.min.js"></script>
        <script type="text/javascript" src="/easyui/locale/easyui-lang-zh_CN.js"></script>
        <style type="text/css">
            .form-group{width:200px;height: 35px;margin: auto;}
            .form-group:first-child{margin-top:10px;}
            .form-group:last-child{text-align:center;}
            .in{width:200px;height: 25px;border: 1px solid lightgray;}
            .in:focus{border: 1px solid #95B8E7;box-shadow: 0px 0px 5px 2px #95B8E7;}
            .searchin{width:120px;}
        </style>
        <script type="text/javascript">
            $(function () {
                $("#dg").datagrid({
                    url:"/employee/page",
                    method:"post",
                    striped:true,
                    rownumbers:true,
                    pagination:true,
                    toolbar:"#toolbar",
                    frozenColumns:[[{field:'hhhh',title:'代码',checkbox:true}]],
                    columns:[[
                        {field:"id",title:"编号",width:100},
                        {field:"name",title:"姓名",width:100},
                        {field:"gender",title:"性别",width:100,formatter:function(value, row, index) {
                            return value == 1 ? "男" : "女";
                        }},
                        {field:"email",title:"邮箱",width:100},
                        {field:"age",title:"年龄",width:100},
                        {field:"phone",title:"手机",width:100},
                        {field:"salary",title:"工资",width:100},
                        {field:"department",title:"所属部门",width:100,formatter:function(value, row, index) {
                            return value && value.name ? value.name : "";
                        }}
                    ]]
                });

                //获取datagrid的翻页工具栏对象 Pagination
                var pager = $("#dg").datagrid("getPager");
                pager.pagination({
                    onSelectPage:function(pageNumber, pageSize){
                        $("#dg").datagrid('loading');
                        //将当前页码和每页展示的数据作为请求参数发送到datagrid的url地址
                        $("#dg").datagrid('load',{
                            pageNum:pageNumber,
                            pageSize:pageSize
                        });
                        //改变分页工具栏下方展示的当前页码和每页显示的行数
                        pager.pagination({
                            pageNumber:pageNumber,
                            pageSize:pageSize
                        });
                        $("#dg").datagrid('loaded');
                    }
                });

                //给btn-add按钮绑定点击事件
                $("#btn-add").click(function () {
                    $("#dialog").dialog("open");
                    //重置表单
                    $("#ffff").form("reset");
                });

                //给btn-submit按钮绑定点击事件
                $("#btn-submit").click(function () {
                    //serializeObject方法来自于jquery.jdirk.js文件,作用是将一个表单序列化成一个json对象
                    var params = $("#ffff").serializeObject();

                    var url = "/employee/save";
                    //如果id输入框有值,就是修改,否则就是新增
                    if(params.id){
                        url = "/employee/save";
                    }
                    $.post(url,params,function (data) {
                        if(data.status == 200){
                            $.messager.alert("消息",data.msg,"info");
                            //关闭表单窗口
                            $("#dialog").dialog("close");
                            //重新加载一下表格的数据
                            $("#dg").datagrid('load',{
                                pageNo:1,
                                pageSize:10
                            });
                            $("#dg").datagrid("getPager").pagination({
                                pageNumber:pageNumber,
                                pageSize:pageSize
                            });
                        }else{
                            $.messager.alert("错误",data.msg,"error");
                        }
                    },"json");
                });
                
                //给btn-edit按钮绑定点击事件
                $("#btn-edit").click(function () {
                    //先获取用户选中的行
                    var rows = $("#dg").datagrid("getSelections");
                    if(rows.length == 0){
                        $.messager.alert("错误","请先选中你要修改的数据!","error");
                        return;
                    }
                    if(rows.length > 1){
                        $.messager.alert("错误","只能选中一行数据进行修改!","error");
                        return;
                    }
                    //通过id去查询一行数据,进行表单回填
                    $.getJSON("/employee/findOne",{id:rows[0].id},function (data) {
                        //表单回填
                        $('#ffff').form('load',data);
                        //打开表单窗口
                        $("#dialog").dialog("open");
                        //手动回填一下关联的部门下拉框
                        if(data.department) $("#departmentId").combobox("setValue",data.department.id);
                    });
                });
                
                //给btn-remove按钮绑定点击事件
                $("#btn-remove").click(function () {
                    //先获取用户选中的行
                    var rows = $("#dg").datagrid("getSelections");
                    if(rows.length == 0){
                        $.messager.alert("错误","请先选中你要删除的数据!","error");
                        return;
                    }
                    $.messager.confirm('确认','您确认想要删除这些数据吗?',function(r){
                        if (r){
                            var ids = [];
                            for(var i=0;i<rows.length;i++){
                                ids.push(rows[i].id);
                            }
                            //支持一次性删除多行数据,参数格式是:12,2,23,17   以逗号隔开
                            $.getJSON("/employee/delete",{ids:ids.join(",")},function (data) {
                                if(data.status == 200){
                                    $.messager.alert("消息",data.msg,"info");
                                    //重新加载一下表格的数据
                                    $("#dg").datagrid('load',{
                                        pageNo:1,
                                        pageSize:10
                                    });
                                    $("#dg").datagrid("getPager").pagination({
                                        pageNumber:pageNumber,
                                        pageSize:pageSize
                                    });
                                }else{
                                    $.messager.alert("错误",data.msg,"error");
                                }
                            });
                        }
                    });
                });
            });
        </script>
    </head>
    <body>
        <div id="toolbar">
            <a id="btn-add" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-add'">新增</a>
            <a id="btn-edit" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-edit'">编辑</a>
            <a id="btn-remove" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-remove'">删除</a>
        </div>
        <table id="dg"></table>
        <div id="dialog" class="easyui-dialog" title="新增/编辑员工信息" style="width:400px;height:340px;top:100px;"
             data-options="iconCls:'icon-save',resizable:true,modal:true,closed:true">
            <form id="ffff">
                <div class="form-group">
                    <input type="hidden" name="id" />
                    <input type="text" name="name" placeholder="姓名" class="easyui-validatebox in" />
                </div>
                <div class="form-group">
                    <input type="text" name="email" placeholder="邮箱" class="easyui-validatebox in" />
                </div>
                <div class="form-group">
                    <input type="text" name="age" placeholder="年龄" class="easyui-validatebox in" />
                </div>
                <div class="form-group">
                    <input type="text" name="phone" placeholder="电话" class="easyui-validatebox in" />
                </div>
                <div class="form-group">
                    <input type="text" name="salary" placeholder="工资" class="easyui-validatebox in" />
                </div>
                <div class="form-group">
                    <input type="text" name="department.id" id="departmentId" class="easyui-combobox in"
                        data-options="url:'/department/findAll',valueField:'id',textField:'name',value:'-1',editable:false"/>
                </div>
                <div class="form-group">
                    <input type="radio" name="gender" value="1" /><input type="radio" name="gender" value="2" /></div>
                <div class="form-group">
                    <a id="btn-cancel" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-undo'">取消</a>
                    <a id="btn-submit" href="javascript:void(0);" class="easyui-linkbutton" data-options="iconCls:'icon-redo'">提交</a>
                </div>
            </form>
        </div>
    </body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值