1.针对学生信息进行的CURD操作
在使用mybaitis时,在Configuration.xml主配置文件中,别名命名要以包名命名。在StudentDao.xml中namespace命名直接COPY包名最稳,在对映射文件中所有的sql语句进行测试,是否可运行,不能引起不必要的错误。在数据不显示或者报错的情况下,要一层一层的寻找错误,可以system输出找错,或debug。但debug不是很会用。通过此次独立开发,对MVC结构理解也更深一点吧,至少改错能力强了很多..
mybaitis相关配置文件:
主配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--
<settings>
<setting name="useGeneratedKeys" value="false"/>
<setting name="useColumnLabel" value="true"/>
</settings>
-->
<!-- 配置data文件 -->
<properties resource="config/data.properties"></properties>
<!-- 别名 -->
<typeAliases><package name="com.etc.entity"/></typeAliases>
<environments default="development">
<environment id="test">
<transactionManager type="JDBC">
</transactionManager>
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///myschool?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123123"/>
</dataSource>
</environment>
<environment id="development">
<transactionManager type="JDBC">
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 配置映射文件 -->
<mappers>
<package name="com.etc.dao"/>
</mappers>
</configuration>
学生映射文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.etc.dao.StudentDao">
<resultMap type="Student" id="StudentResult">
<id column="studentNo" property="studentNo"/>
<result column="name" property="name"/>
<result column="sex" property="sex"/>
<result column="age" property="age"/>
<result column="phone" property="phone"/>
<result column="address" property="address"/>
<result column="email" property="email"/>
<result column="birthday" property="birthday"/>
<association property="grade" javaType="Grade">
<result column="gradeId" property="gradeId"/>
</association>
</resultMap>
<select id="find" resultMap="StudentResult">
select * from student
</select>
<insert id="add" parameterType="Student">
insert into student(name,sex,age,phone,address,email,birthday)
values(#{name},#{sex},#{age},#{phone},#{address},#{email},#{birthday})
</insert>
<select id="findone" parameterType="java.lang.String" resultMap="StudentResult">
select * from student where name like '%' #{name} '%'
</select>
<select id="findmany" parameterType="Student" resultMap="StudentResult">
select * from student where 1=1
<if test="name!=null">
and name like '%' #{name} '%'
</if>
<if test="address!=null">
and address like '%' #{address} '%'
</if>
</select>
<delete id="delete" parameterType="int">
delete from student where studentNo=#{id}
</delete>
<update id="update" parameterType="Student">
update student set name=#{name},sex=#{sex},age=#{age},phone=#{phone},
address=#{address},email=#{email} where studentNo=#{studentNo}
</update>
</mapper>
①相关接口方法:
public List<Student> find();
public List<Student> findmany(String name,String address);
public Student add(Student student);
public void delete(int id);
public void update(Student student);
②servies层
public List<Student> find() throws IOException{
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
List<Student> students = new ArrayList<Student>();
students = sqlSession.selectList("com.etc.dao.StudentDao.find");
sqlSession.close();
return students;
}
public Student add(Student student){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
sqlSession.insert("com.etc.dao.StudentDao.add", student);
sqlSession.commit();
sqlSession.close();
return student;
}
//单条删除
public void delete(int id){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
sqlSession.delete("com.etc.dao.StudentDao.delete",id);
sqlSession.commit();
sqlSession.close();
}
//修改
public void update(Student student){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
sqlSession.delete("com.etc.dao.StudentDao.update",student);
sqlSession.commit();
sqlSession.close();
}
//多条件查找
public List<Student> findmany(String name,String address){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
Student student = new Student();
student.setName(name);
student.setAddress(address);//将索引条件封装到对象中
List<Student> students = sqlSession.selectList("com.etc.dao.StudentDao.findmany", student);
return students;
}
③servlet层
if (request.getParameter("tag") != null) {
String tag = request.getParameter("tag");
if (tag.equals("add")) {
String name = request.getParameter("name");
String sex = request.getParameter("sex");
int age = Integer.parseInt(request.getParameter("age"));
String phone = request.getParameter("phone");
String address = request.getParameter("address");
String email = request.getParameter("email");
// Date birthday = new Date(request.getParameter("birthday"));
Student student = new Student();
student.setName(name);
student.setSex(sex);
student.setAge(age);
student.setPhone(phone);
student.setAddress(address);
student.setEmail(email);
// student.setBirthday(birthday);
new StudentService().add(student);
request.getRequestDispatcher("addsuccess.jsp").forward(request,
response);
} else if (tag.equals("del")) {
String id = request.getParameter("id");
new StudentService().delete(Integer.parseInt(id));
} else if (tag.equals("edit")) {
int studentNo = Integer.parseInt(request
.getParameter("studentNo"));
String name = request.getParameter("name");
String sex = request.getParameter("sex");
int age = Integer.parseInt(request.getParameter("age"));
String phone = request.getParameter("phone");
String address = request.getParameter("address");
String email = request.getParameter("email");
Student student = new Student();
student.setStudentNo(studentNo);
student.setName(name);
student.setSex(sex);
student.setAge(age);
student.setPhone(phone);
student.setAddress(address);
student.setEmail(email);
new StudentService().update(student);
System.out.println("修改成功...");
}
}
// 多条件模糊查询
List<Student> students = new ArrayList<Student>();
students = new StudentService().find();
request.setAttribute("students", students);
if (request.getParameter("name") != null && request.getParameter("address")!=null) {
String name = request.getParameter("name");
String address = request.getParameter("address");
request.setAttribute("name", name);
request.setAttribute("address", address);
students = new StudentService().findmany(name, address);
request.setAttribute("students", students);
}
request.getRequestDispatcher("studentList.jsp").forward(request,
response);
}
④jsp页面,关于jsp页面,由于4个功能都写在一个servlet里面,所以在每一个链接后都加入一个?tag,将设置的值传到servlet中,进行判断,从而实现相关逻辑的实现。主要放关于传值的jsp代码,其余界面都大同小异...
在主页面超链接中 <a href=”url?id=${} ”> <a href=”url?id=<%=student.getId()%> ”> 进行传值
进行修改操作,主键的传值..
<a href="studentEdit.jsp?studentNo=${stu.studentNo}">编辑</a>
接受值的updatestudent.jsp页面
<%
String studentNo = request.getParameter("studentNo");
request.setAttribute("studentNo", studentNo);
%>
<input type="hidden" name="studentNo" value="${studentNo}">
最后谈谈自己对mybaits的感觉,想比较与jdbc,还是舒服很多的。jdbc,代码量大,虽说大部分只需写一遍,很多东西可以直接复制,但主要的一点就是mybaits能够简化功能的实现,不需要接口实现类,直接开写service,还是比较舒服,节省了很多代码。继续学习ing.....