mybatis实现表CURD遇到的问题(第一次发,以后回来看看遇到的这些问题手动捂脸..)

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.....



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现基于Mybatis的留言本可能遇到问题及解决办法如下: 1. 配置文件问题: - 问题:配置文件中的数据库连接信息、Mybatis配置等可能存在错误。 - 解决办法:检查配置文件中的数据库连接信息,确保数据库连接正常;检查Mybatis配置,包括Mapper扫描路径、别名等是否设置正确。 2. 数据库操作问题: - 问题:对数据库的增删改查操作可能存在错误。 - 解决办法:检查SQL语句是否正确,包括名、字段名是否拼写正确;确保参数传递正确,类型匹配;使用Mybatis提供的日志功能来查看具体执行的SQL语句并进行调试。 3. 事务管理问题: - 问题:如果在操作过程中需要进行事务管理,可能存在事务提交失败或回滚不完整的问题。 - 解决办法:在需要进行事务管理的方法上加上@Transactional注解,确保在方法执行过程中,生异常时能够回滚事务;使用try-catch-finally块来捕获异常并进行事务回滚。 4. 缓存问题: - 问题:在查询操作频繁的情况下,可能存在缓存未命中或缓存数据失效的问题。 - 解决办法:配置Mybatis的二级缓存,对经常查询的数据进行缓存,提高查询性能;合理设置缓存的过期时间,确保数据及时更新。 5. 映射关系问题: - 问题:Java对象和数据库之间的映射关系可能存在错误。 - 解决办法:检查实体类和数据库的字段映射是否一致;使用注解或XML配置正确的映射关系;使用Mybatis提供的映射工具来生成映射文件,减少手动配置的错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值